iT邦幫忙

0

TCPDF Bookmark

php
  • 分享至 

  • xImage
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$PDF_FILE=file_get_contents("C:/Users/TEST/TEST.pdf");
$pdf->Bookmark('Chapter 1', 0, 0, '', 'B', array(0,128,0),'',$PDF_FILE);

想請問各位大大,要將sever上的pdf用程式新增書籤,
有找到TCPDF,當中的Bookmark參數最後一個link指的是要新增書籤的檔案路徑嗎?
測試好幾次新增書籤都失敗,想請教各位大大。
如有誤會,請再多多指教謝謝

淺水員 iT邦大師 6 級 ‧ 2022-12-05 17:53:14 檢舉
TCPDF 應該沒辦法開啟已經存在的 pdf 來新增書籤(就我知道的部分)
多半是要找其他函式庫來處理
qpalzm iT邦新手 1 級 ‧ 2022-12-05 23:16:16 檢舉
了解,爬了好久的文也都是從不存在變成存在使用,想請問大大可以分享若已存在PDF想新增書籤的話有甚麼函示庫嗎
淺水員 iT邦大師 6 級 ‧ 2022-12-06 12:31:11 檢舉
以前我沒有類似的需求,所以沒有確定可用的
剛剛查了一下,有找到 setasign/fpdi 這個套件
還需要研究看看
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
淺水員
iT邦大師 6 級 ‧ 2022-12-06 16:50:48
最佳解答

setasign/fpdi 確定可以用
他的原理是繼承原有的 pdf library,再添加內嵌其他 pdf 頁面的 method

以下範例用到的 pdf: 03-111學測數學a試卷定稿.pdf

composer.json

{
    "require": {
        "tecnickcom/tcpdf": "6.3.*",
        "setasign/fpdi": "^2.0"
    }
}

test.php

<?php
require('vendor/autoload.php');

use setasign\Fpdi\Tcpdf\Fpdi;

$pdf = new Fpdi();

// 移除 header 與 footer(繼承自 TCPDF)
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);

// 指定要被匯入的檔案,並取得總頁數
$pageCount = $pdf->setSourceFile("03-111學測數學a試卷定稿.pdf");

for ($i = 0; $i < $pageCount; ++$i) {
    // 匯入頁面,注意是從 1 開始算
    $tplId = $pdf->importPage($i + 1);
    // 取得匯入那頁的長寬
    $szInfo = $pdf->getImportedPageSize($tplId);
    // 增加一頁,並設定長寬(AddPage 繼承自 TCPDF)
    $pdf->AddPage($szInfo['orientation'], [$szInfo['width'], $szInfo['height']]);
    // 把這頁「畫上去」
    $pdf->useTemplate($tplId);
}

// 添加書籤(繼承自 TCPDF),第三個參數是 y 位置,抓個大概而已
$pdf->Bookmark('選擇題', 0, 0, 2);
$pdf->Bookmark('多選題', 0, 297 / 2, 3);
$pdf->Bookmark('選填題', 0, 297 / 3 - 20, 5);

$pdf->Output();
qpalzm iT邦新手 1 級 ‧ 2022-12-08 09:01:15 檢舉

謝謝大大的分享/images/emoticon/emoticon07.gif

我要發表回答

立即登入回答