将pdf合并为单个pdf [英] Merge pdf into single pdf

查看:77
本文介绍了将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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆