将pdf合并为单个pdf [英] Merge pdf into single pdf
本文介绍了将pdf合并为单个pdf的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何使用客户端技术将2个pdf文件合并为单个pdf。
我尝试过:
var urls = [
//'C:\ Users \ Khagesh \Desktop\PaySlip_Itentso \ Payslip_Dec',
//'C:\Users\Khagesh \Desktop\PaySlip_Itentso \ Payslip_Nov'
'http://mozilla.github.io/pdf.js/web/compressed.tracemonkey-pldi-09 .pdf',
'http://mozilla.github.io/pdf.js/web/compressed.tracemonkey-pldi-09.pdf'
];
//禁用工作人员以避免另一个跨源问题(工作人员需要
//要加载的脚本的URL,并动态加载跨源的
/ / script不起作用)。
//
// PDFJS.disableWorker = true;
//如果pdf.worker.js位于与
// pdf.js不同的文件夹中,或者pdf.js通过eval()执行,应指定workerSrc属性
//。
//
// PDFJS.workerSrc ='pdf.worker.js';
/ **
* @typedef {Object} PageInfo
* @property {number} documentIndex
* @property {number} pageNumber
* /
var pdfDocs = [],
/ **
* @property {PageInfo}
* /
current = {},
totalPageCount = 0,
pageNum = 1,
pageRendering = false,
pageNumPending = null,
scale = 0.8,
canvas = document.getElementById('the-canvas '),
ctx = canvas.getContext('2d');
/ **
*从文档中获取页面信息,相应地调整画布大小和渲染页面。
* @param num页码。
* /
函数renderPage(num){
pageRendering = true;
current = getPageInfo(num);
//使用promise获取页面
pdfDocs [current.documentIndex]
.getPage(current.pageNumber).then(function(page){
var viewport = page。 getViewport(scale);
canvas.height = viewport.height;
canvas.width = viewport.width;
//将PDF页面渲染到画布上下文
var renderContext = {
canvasContext:ctx,
viewport:viewport
};
var renderTask = page.render(renderContext);
//等待渲染完成
renderTask.promise.then(function(){
pageRendering = false;
if(pageNumPending!== null){
//新页面渲染待定
renderPage(pageNumPending);
pageNumPending = null;
}
});
});
//更新页面计数器
document.getElementById('page_num')。textContent = pageNum;
}
/ **
*如果正在进行另一个页面渲染,则等待渲染为
* finised。否则,立即执行渲染。
* /
函数queueRenderPage(num){
if(pageRendering){
pageNumPending = num;
} else {
renderPage(num);
}
}
/ **
*显示上一页。
* /
函数onPrevPage(){
if(pageNum< = 1){
return;
}
pageNum--;
queueRenderPage(pageNum);
}
document.getElementById('prev')。addEventListener('click',onPrevPage);
/ **
*显示下一页。
* /
函数onNextPage(){
if(pageNum> = totalPageCount&& current.documentIndex + 1 === pdfDocs.length){
return;
}
pageNum ++;
queueRenderPage(pageNum);
}
document.getElementById('next')。addEventListener('click',onNextPage);
/ **
* @returns PageNumber
* /
函数getPageInfo(num){
var totalPageCount = 0;
for(var docIdx = 0; docIdx< pdfDocs.length; docIdx ++){
totalPageCount + = pdfDocs [docIdx] .numPages;
if(num< = totalPageCount){
return {documentIndex:docIdx,pageNumber:num};
}
num - = pdfDocs [docIdx] .numPages;
}
返回false;
};
函数getTotalPageCount(){
var totalPageCount = 0;
for(var docIdx = 0; docIdx< pdfDocs.length; docIdx ++){
totalPageCount + = pdfDocs [docIdx] .numPages;
}
返回totalPageCount;
}
var loadedCount = 0;
function load(){
//一个接一个地加载PDF
PDFJS.getDocument(urls [loadedCount])。然后(function(pdfDoc_){
console.log('加载PDF'+ loadedCount);
pdfDocs.push(pdfDoc_);
loadedCount ++;
if(loadedCount!== urls.length){
return load();
}
console.log('完成加载');
totalPageCount = getTotalPageCount();
document.getElementById('page_count')。textContent = totalPageCount;
//初始/首页渲染
renderPage(pageNum);
});
}
HTML:
< pre><%@ Page Language =C#AutoEventWireup =trueCodeBehind =MergePDF .aspx.csInherits =MergePDFUsingJS.MergePDF%>
<!DOCTYPE html>
< html xmlns =http://www.w3.org/1999/xhtml>
< head runat =server>
< base href =https://mozilla.github.io/pdf.js//>
< title>< / title>
< script type =text / javascriptsrc =build / PDF1.js> < /脚本>
< script type =text / javascriptsrc =build / pdf.js>< / script>
<% - / *< script src =web / compatibility.js>< / script> * / - %>
< / head>
< body onload =load()>
< form id =form1runat =server>
< div>
< button id =prev>上一页< / button>
< button id =next>下一步< / button>
&NBSP;
< span> Page:< span id =page_num>< / span> /< span id =page_count>< / span>< / span>
< / div>
< div>
< canvas id =the-canvasstyle =border:1px solid black>< / canvas>
< / div>
< / form>
< / body>
< / html>
解决方案
我相信软件是只读的;你需要的软件既可以读取存在的PDF并写一个新的(也就是合并的)
尝试使用这样的字节数:
var https = require(https);
var path = require(path);
var fs = require(fs);
//身份验证密钥(API密钥)。
//通过注册https://secure.bytescout.com/users/sign_up获取您自己的
const API_KEY =***************** ******************;
//要合并的PDF文件的直接网址
const SourceFiles = [
https://s3-us-west-2.amazonaws.com/ bytescout-com / files / demo-files / cloud-api / pdf-merge / sample1.pdf,
https://s3-us-west-2.amazonaws.com/bytescout-com/files/ demo-files / cloud-api / pdf-merge / sample2.pdf
];
//目标PDF文件名
const DestinationFile =./ result.pdf;
//准备合并PDFAPI端点的请求
var queryPath =`/ v1 / pdf / merge?name =
{path.basename(DestinationFile)}&安培; URL =
how to merge 2 pdf files into single pdf using client side technologies.
What I have tried:
var urls = [ //'C:\Users\Khagesh\Desktop\PaySlip_Itentso\Payslip_Dec', //'C:\Users\Khagesh\Desktop\PaySlip_Itentso\Payslip_Nov' 'http://mozilla.github.io/pdf.js/web/compressed.tracemonkey-pldi-09.pdf', 'http://mozilla.github.io/pdf.js/web/compressed.tracemonkey-pldi-09.pdf' ]; // Disable workers to avoid yet another cross-origin issue (workers need // the URL of the script to be loaded, and dynamically loading a cross-origin // script does not work). // // PDFJS.disableWorker = true; // In cases when the pdf.worker.js is located at the different folder than the // pdf.js's one, or the pdf.js is executed via eval(), the workerSrc property // shall be specified. // // PDFJS.workerSrc = 'pdf.worker.js'; /** * @typedef {Object} PageInfo * @property {number} documentIndex * @property {number} pageNumber */ var pdfDocs = [], /** * @property {PageInfo} */ current = {}, totalPageCount = 0, pageNum = 1, pageRendering = false, pageNumPending = null, scale = 0.8, canvas = document.getElementById('the-canvas'), ctx = canvas.getContext('2d'); /** * Get page info from document, resize canvas accordingly, and render page. * @param num Page number. */ function renderPage(num) { pageRendering = true; current = getPageInfo(num); // Using promise to fetch the page pdfDocs[current.documentIndex] .getPage(current.pageNumber).then(function (page) { var viewport = page.getViewport(scale); canvas.height = viewport.height; canvas.width = viewport.width; // Render PDF page into canvas context var renderContext = { canvasContext: ctx, viewport: viewport }; var renderTask = page.render(renderContext); // Wait for rendering to finish renderTask.promise.then(function () { pageRendering = false; if (pageNumPending !== null) { // New page rendering is pending renderPage(pageNumPending); pageNumPending = null; } }); }); // Update page counters document.getElementById('page_num').textContent = pageNum; } /** * If another page rendering in progress, waits until the rendering is * finised. Otherwise, executes rendering immediately. */ function queueRenderPage(num) { if (pageRendering) { pageNumPending = num; } else { renderPage(num); } } /** * Displays previous page. */ function onPrevPage() { if (pageNum <= 1) { return; } pageNum--; queueRenderPage(pageNum); } document.getElementById('prev').addEventListener('click', onPrevPage); /** * Displays next page. */ function onNextPage() { if (pageNum >= totalPageCount && current.documentIndex + 1 === pdfDocs.length) { return; } pageNum++; queueRenderPage(pageNum); } document.getElementById('next').addEventListener('click', onNextPage); /** * @returns PageNumber */ function getPageInfo(num) { var totalPageCount = 0; for (var docIdx = 0; docIdx < pdfDocs.length; docIdx++) { totalPageCount += pdfDocs[docIdx].numPages; if (num <= totalPageCount) { return { documentIndex: docIdx, pageNumber: num }; } num -= pdfDocs[docIdx].numPages; } return false; }; function getTotalPageCount() { var totalPageCount = 0; for (var docIdx = 0; docIdx < pdfDocs.length; docIdx++) { totalPageCount += pdfDocs[docIdx].numPages; } return totalPageCount; } var loadedCount = 0; function load() { // Load PDFs one after another PDFJS.getDocument(urls[loadedCount]).then(function (pdfDoc_) { console.log('loaded PDF ' + loadedCount); pdfDocs.push(pdfDoc_); loadedCount++; if (loadedCount !== urls.length) { return load(); } console.log('Finished loading'); totalPageCount = getTotalPageCount(); document.getElementById('page_count').textContent = totalPageCount; // Initial/first page rendering renderPage(pageNum); }); } HTML: <pre><%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MergePDF.aspx.cs" Inherits="MergePDFUsingJS.MergePDF" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <base href="https://mozilla.github.io/pdf.js/" /> <title></title> <script type="text/javascript" src="build/PDF1.js"> </script> <script type="text/javascript" src="build/pdf.js"></script> <%-- /* <script src="web/compatibility.js"></script>*/--%> </head> <body onload="load()"> <form id="form1" runat="server"> <div> <button id="prev">Previous</button> <button id="next">Next</button> <span>Page: <span id="page_num"></span> / <span id="page_count"></span></span> </div> <div> <canvas id="the-canvas" style="border:1px solid black"></canvas> </div> </form> </body> </html>
解决方案
I believe that software is read-only; you would need software that can both read existings PDFs and write a new one (aka merged)
try to use bytesout like this :
var https = require("https"); var path = require("path"); var fs = require("fs"); // The authentication key (API Key). // Get your own by registering at https://secure.bytescout.com/users/sign_up const API_KEY = "***********************************"; // Direct URLs of PDF files to merge const SourceFiles = [ "https://s3-us-west-2.amazonaws.com/bytescout-com/files/demo-files/cloud-api/pdf-merge/sample1.pdf", "https://s3-us-west-2.amazonaws.com/bytescout-com/files/demo-files/cloud-api/pdf-merge/sample2.pdf" ]; // Destination PDF file name const DestinationFile = "./result.pdf"; // Prepare request to `Merge PDF` API endpoint var queryPath = `/v1/pdf/merge?name=
{path.basename(DestinationFile)}&url=
这篇关于将pdf合并为单个pdf的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文