答えて
複数のドキュメントを組み合わせてpdf.jsで表示するだけで簡単に可能です。単純なprev/next viewerの例に基づいて、mozillaがリポジトリに提供する次の例をハッキングしました。適切なCORS-ヘッダーを送信するサーバー上でそこに信頼性の高いテストドキュメントを持っていないの便宜上
// If absolute URL from the remote server is provided, configure the CORS
// header on that server.
//
var urls = [
'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);
});
}
<!DOCTYPE html>
<html>
<head>
<base href="https://mozilla.github.io/pdf.js/" />
<meta charset="UTF-8">
<title>Previous/Next example</title>
</head>
<body onload="load()">
<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>
<!-- for legacy browsers add compatibility.js -->
<script src="web/compatibility.js"></script>
<script src="build/pdf.js"></script>
</body>
</html>
、この例では、単純に既定のドキュメントの2つのコピーをマージします。独自のサーバーでこれを実行する場合は、同じドメインにホストされているドキュメントをurls
アレイに追加することで、ドキュメントを追加できます。
素晴らしい、実際の解決策を見てよかった –
私の喜び:Dこれはプロジェクトのために、とにかく概念の証明として必要なので、ようこそ。図書館の[api documentation](http://mozilla.github.io/pdf.js/api/draft/index.html)は、隠されていない存在です - しかし、長い間コードを見つめていると、最終的にどこかで私を得ることがあります。 – Philzen
まず、サーバー上でページをまとめてマージする方がよいでしょう。
あなたはこれのためにtcpdfをお勧めしますか? –
またはJavaで作業している場合は、Itext。 –
javaはjavascriptではありません。なぜ私はjavaを使いたいのですか?私は今fpdfとfpdiでそれをやった –
- 1. サブクラスで結合をフィルタリングする方法はありますか?
- 2. Javascriptでオブジェクトを結合する方法はありますか?
- 3. 型制約を結合する方法はありますか?
- 4. FuncをFuncに結合する方法はありますか?
- 5. パラメータをテーブルに結合する方法はありますか?
- 6. バックグラウンドサイズのクラスを結合する方法はありますか?
- 7. Elastic Searchで2つのインデックスを結合する方法はありますか?
- 8. SQL結合で重複を排除する方法はありますか?
- 9. pdf.jsでPDFハイパーリンクにアクセス
- 10. pdfをトレースする方法はありますか?
- 11. pdf.jsを使用してPDFページの矩形領域を切り取る方法
- 12. ローカルpdfファイルを含むpdf.js
- 13. ActiveRecordの結果をselect_allの結果と列で結合する方法はありますか?
- 14. 1つのテーブルのみを左結合する方法はありますか?
- 15. 上記の行を結合する方法はありますか?
- 16. カスタムタグにマークアップタグを「結合する」純粋なHTML方法はありますか?
- 17. @Transactionalとログを結合する簡単な方法はありますか?
- 18. 2つのオプションを「結合」する方法はありますか?
- 19. 大きなカレンダービューの結合を許可する方法はありますか?
- 20. この結合を行うより良い方法はありますか?
- 21. Linqによる複数の結合と左結合の方が良い方法はありますか?
- 22. 2つのRDDを結合する方法:値結合はorg.apache.spark.rdd.RDDのメンバーではありません[org.apache.spark.sql.Row]
- 23. Perlでは、隠しを結ぶ方法はありますか?
- 24. oracle apexレポートをPDF形式でダウンロードする方法はありますか?
- 25. reportlibにpython3でPDFファイルをマージする方法はありますか?
- 26. IEでPDFのプレビューを生成する方法はありますか
- 27. iOS向けのPDFでレポートを作成する方法はありますか?
- 28. PDFで時間制限を設定する方法はありますか?
- 29. ツールバービューアをPDF.jsに追加する方法
- 30. pdfドキュメントを結合してページを追加する方法
私が理解するように、pdf.jsはPDFジェネレータではなくHTML5を使用するPDFレンダリングライブラリです。同じHTML5キャンバス内で複数のPDFをレンダリングすることを検討していますか? –
はいthats私は –