标签: fpdi

如何使用Ruby编辑或编写现有PDF?

我有几个包含复杂内容的PDF模板文件以及其中的几个空白区域/区域.我需要能够在这些空白区域中写入文本并将生成的PDF保存在文件夹中.

我搜索了这个问题的答案非常密集,但我找不到明确的答案.其中一个更好的解决方案是PDF :: Toolkit,但它需要购买Adobe Acrobat才能为现有PDF文档添加可替换属性.

PHP世界拥有FPDI,可用于简单地打开PDF文件并在现有内容上书写/绘制.这个库有一个Ruby端口,但它的最后一次提交发生在2009年初.此项目看起来并不像它被广泛使用和支持.

问题是:在现有PDF上编辑,编写或绘图的Ruby方式有哪些?

这个问题似乎也没有在这里回答.这些问题是相关的,但并不完全相同:

ruby pdf-generation ruby-on-rails fpdi

36
推荐指数
4
解决办法
2万
查看次数

FPDF错误:此文档(testcopy.pdf)可能使用FPDI附带的免费解析器不支持的压缩技术

我正在运行以下代码,并给我这个错误:FPDF error: This document (testcopy.pdf) probably uses a compression technique which is not supported by the free parser shipped with FPDI.我使用另一个名为pdf test.pdf,并且工作正常,但它给了我错误testcopy.pdf.

我认为这是解析器问题.任何人都知道可以与fpdf一起使用的任何其他解析器以避免此错误吗?

我的代码:

require('fpdf17/fpdf.php'); 
require('fpdf17/fpdi.php'); 
// initiate FPDI 
$pdf = new FPDI(); 
while (ob_get_level())
ob_end_clean();
header("Content-Encoding: None", true);
// set the sourcefile 
$pagecount = $pdf->setSourceFile('testcopy.pdf');
Run Code Online (Sandbox Code Playgroud)

我想在两个pdf中分割pdf,并希望在文件附件字段中附加两个pdf.如何将pdf保存到服务器.用fpdf可以实现吗?

php fpdf fpdi

18
推荐指数
6
解决办法
3万
查看次数

有没有办法让FPDF/FPDI或Zend_Pdf支持解析大于1.4的PDF?

我正在尝试将现有PDF(另外创建)添加到使用FPDI使用FPDF创建的PDF中.它似乎适用于大多数PDF,但我收到以下错误:

FPDF error: Unable to find xref table.
Run Code Online (Sandbox Code Playgroud)

经过一些测试,我发现如果我使用的是1.4或更低版本的Acrobat(Acrobat v5或更低版本),它似乎可行.看文件似乎是因为PDF格式不同.

有解决方法吗?我可能有10 000多个用户上传的PDF文件,其中一些是新的,有些则没有.令人讨厌的是,FPDI只是死了而不是造成某种错误甚至返回错误

我现在能想到的唯一解决方案是解析PDF文件的第一行以确定版本,并且只添加那些可以使用的版本.

编辑:

我也在Zend_Pdf中尝试了这个,它使用Zend Framework附带的演示文件得到了以下结果:

Fatal error: Uncaught exception 'Zend_Pdf_Exception' with message 'Cross-reference streams are not supported yet.' in /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf/Parser.php:331
Stack trace:
#0 /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf/Parser.php(455): Zend_Pdf_Parser->_loadXRefTable('116')
#1 /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf.php(297): Zend_Pdf_Parser->__construct('/Volumes/Docume...', Object(Zend_Pdf_ElementFactory_Proxy), true)
#2 /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf.php(250): Zend_Pdf->__construct('/Volumes/Docume...', NULL, true)
#3 /Volumes/Documents/temp/ZendFramework-1.7.7/demos/Zend/Pdf/demo.php(37): Zend_Pdf::load('/Volumes/Docume...')
#4 {main}
  thrown in /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf/Parser.php on line 331
Run Code Online (Sandbox Code Playgroud)

是否无法解析大于1.4的PDF?

php zend-framework fpdf fpdi zend-pdf

13
推荐指数
4
解决办法
2万
查看次数

FPDF/FPDI可以使用横向格式的PDF作为模板吗?

我正在尝试使用FPDI将现有PDF导入为模板.模板采用横向格式.如果我将模板导入新文档,模板页面将以纵向形式插入,内容旋转90度.如果我的新文档是纵向的,则会显示完整内容,但如果新文档也是横向文档,则会裁剪内容.

是否可以使用FPDI的横向模板?

php fpdf fpdi

12
推荐指数
1
解决办法
3万
查看次数

FPDI合并PDF文件,出现奇怪的行

我需要在用户需要时合并PDF文件.文件已经存在,一切都很好.我正在使用fallowing代码来合并文件:

class concat_pdf extends FPDI 
{
    var $files = array();

    function setFiles($files) 
    {
        $this->files = $files;
    }

    function concat() 
    {
        foreach($this->files AS $file) 
        {
            $pagecount = $this->setSourceFile($file);

            for($i = 1; $i <= $pagecount; $i++) 
            {
                $this->AddPage('P');
                $tplidx = $this->ImportPage($i);
                $this->useTemplate($tplidx);
            }
        }
    }
}

$pdf = new concat_pdf();
$pdf->setFiles($files); //$files is an array with existing PDF files.
$pdf->concat();
$pdf->Output("bulk.pdf", "D");
Run Code Online (Sandbox Code Playgroud)

所有文件都已合并,所有内容都在那里.问题是,在新文件的每个页面的顶部,出现一条黑线.内容,边距等都与原始文件完全相同,但这条线无处不在(我可以告诉).它不厚,但清晰可见.它不会混淆其他内容或任何东西,但在那里不需要,我需要删除它.

我已经尝试将ImportPage()函数的第二个参数更改为文档中描述的所有选项,但没有任何区别.因为这是我看到的唯一可以在这几行代码中改变的东西,我真的不知道是什么原因导致黑线出现.我搜索过类似的问题,但到目前为止 - 没有运气.有人有想法吗?提前致谢!

之前 后

php pdf fpdi

12
推荐指数
3
解决办法
7225
查看次数

如何在PHP FPDI库中设置编码

如何在名为FPDI的php库中设置UTF-8编码?这是图书馆:https://www.setasign.com/products/fpdi/manual/

代码:

$pdf = new Fpdi();
$pdf->AddPage();
$pdf->setSourceFile('PdfDocument.pdf');
$tplIdx = $pdf->importPage(1);

$pdf->useTemplate($tplIdx, 10, 10, 100);

$pdf->SetFont('Helvetica');
$pdf->SetTextColor(255, 0, 0);
$pdf->SetXY(30, 30);
$pdf->Write(0, 'Za?ó?ci? g??l? ja??');

$pdf->Output();
Run Code Online (Sandbox Code Playgroud)

[解]

首先:我必须添加适当字母的新字体

$pdf->AddFont('DejaVu','','DejaVuSansCondensed.php');
$pdf->SetFont('DejaVu', '', 10, '', false);
Run Code Online (Sandbox Code Playgroud)

SECOND:关于FPDI用户的FPDF库:有可能的编码:

cp1250 (Central Europe)
cp1251 (Cyrillic)
cp1252 (Western Europe)
cp1253 (Greek)
cp1254 (Turkish)
cp1255 (Hebrew)
cp1257 (Baltic)
cp1258 (Vietnamese)
cp874 (Thai)
ISO-8859-1 (Western Europe)
ISO-8859-2 (Central Europe)
ISO-8859-4 (Baltic)
ISO-8859-5 (Cyrillic)
ISO-8859-7 (Greek)
ISO-8859-9 (Turkish)
ISO-8859-11 (Thai)
ISO-8859-15 (Western Europe)
ISO-8859-16 (Central Europe) …
Run Code Online (Sandbox Code Playgroud)

php pdf fpdf fpdi

12
推荐指数
1
解决办法
2634
查看次数

PDFMerger与FPDI-PDF-PARSER

正在使用FPDI PDF文件合并.但是,在尝试合并PDF文件版本1.5及更高版本时,我遇到了以下问题.以下是我收到的错误:

本文档(doc.pdf)可能使用FPDI附带的免费解析器不支持的压缩技术.(有关详细信息,请参阅 https://www.setasign.com/fpdi-pdf-parser)

我继续访问链接,建议使用商业插件fpdi-pdf-parser.此文件已包含在其余文件中.并且在安装步骤中,据说没有其他步骤需要进行,但我仍然得到相同的错误.

值得注意的是,我正在使用以下PDF合并(反过来,它使用FPDI lib)

https://github.com/myokyawhtun/PDFMerger/blob/master/PDFMerger.php

我不知道如何使用这个"fpdi-pdf-parser addon",它被宣传为我的PDF 1.5问题的解决方案.我错过了什么?

php pdf fpdf fpdi phplib

11
推荐指数
1
解决办法
2275
查看次数

使用FPDI保留内部链接

我正在尝试动态地将一些文本添加到现有的pdf文件中.

我已经尝试将FPDF和TCPDF结合FPDI导入现有的pdf.没关系.但是,正如预期的那样,原始pdf中的所有现有链接都消失了.

然后,我尝试使用此FPDI扩展保留链接:

fpdi_with_annnots https://gist.github.com/andreyvit/2020422

首先,它只保留外部链接,但随后,创建者修改为包含内部链接.但这个扩展是旧的,不再维护,不再适用于**内部链接**(外部链接被保留,没关系!)FPDI和TCPDF.

有人试过(参见上面的Github链接)使其与TCPDF一起使用并更改了这段代码:

$this->PageLinks[$this->page][] = $link;
Run Code Online (Sandbox Code Playgroud)

对此:

$this->Link(
$link[0]/$this->k,
($this->fhPt-$link[1]+$link[3])/$this->k, 
$link[2]/$this->k, 
-$link[3]/$this->k, 
$link[4]
);
Run Code Online (Sandbox Code Playgroud)

然后,过了一段时间,有人说需要改为:

$this->Link(
    $link[0]/$this->k,
    ($this->hPt - $link[1])/$this->k,
    $link[2]/$this->k,
    $link[3]/$this->k,
    $link[4]
);
Run Code Online (Sandbox Code Playgroud)

但它也不再适用.

问题:

1)有谁知道如何更改此代码以保留内部链接?
或者:
2)有没有人知道导入,生成和保留超链接的fpdi_with_annots的替代方法?

提示:也许使用FPDF的"书签"扩展名会有所帮助,而不是Addlink()和Setlink():http://fpdf.de/downloads/addons/1/

fpdf fpdi tcpdf

8
推荐指数
1
解决办法
839
查看次数

如何使用FPDF/FPDI获得精确修改的PDF?

我有一个任务是修改PDF并在其中添加一个图像,我已经使用了FPDF和FPDI库..其动作代码如下:

<?php
require_once('fpdf.php');
require_once('fpdi.php');

$pdf =& new FPDI();
$pdf->AddPage();

//Set the source PDF file
$pagecount = $pdf->setSourceFile("Completed.pdf");

//Import the first page of the file
$tpl = $pdf->importPage(1);


//Use this page as template
// use the imported page and place it at point 20,30 with a width of 170 mm
$pdf->useTemplate($tpl, 20, 30, 170);

#Print Hello World at the bottom of the page

//Select Arial italic 8
$pdf->SetFont('Arial','',8);
$pdf->SetTextColor(0,0,0);
$pdf->SetXY(90, 160);
//$pdf->Rotate(90);
$pdf->Image('think.jpg',120,240,20,20);
$pdf->Image('think.jpg',120,260,20,20);
//$pdf->Write(0, "Hello World");

$pdf->Output("modified_pdf.pdf", "F");
?>
Run Code Online (Sandbox Code Playgroud)

但是当我得到Modified …

php pdf fpdf fpdi

7
推荐指数
1
解决办法
6262
查看次数

FPDF 获取“输出目标不正确”,但错误代码显示正确的目标

我正在尝试使用 FPDF 和 FPDI 编辑 PDF 并向其添加文本。我不断收到“输出目标不正确”错误,但目标是我希望它在其中创建文件的正确位置,为什么 FPDF 不喜欢我的输出目标?

这是在 laravel 项目中

    $pdf = new \setasign\Fpdi\Fpdi();
    $pdf->AddPage();
    $pdf->setSourceFile(public_path('/pdf/higher.pdf'));
    $tplIdx = $pdf->importPage(1);
    $pdf->useTemplate($tplIdx, 10, 10, 100);
    $pdf->SetFont('Helvetica');
    $pdf->SetTextColor(255, 0, 0);
    $pdf->SetXY(30, 30);
    $pdf->Write(0, 'This is just a simple text');
    $pdf->Output(public_path('/pdf/'),'higher2');
    return $pdf;
Run Code Online (Sandbox Code Playgroud)

错误是:

 message: "FPDF error: Incorrect output destination: /home/vagrant/code/project-name/public/pdf/"
Run Code Online (Sandbox Code Playgroud)

我还尝试删除“public_path()”并将其设置为,Output('pdf', 'higher2')但那里也没有好处。

此外,我还尝试更改输出 pdf 的名称,higher2.pdf以防万一它想查看扩展名(但显然它更多的是目的地问题,而不是名称问题)

我什至尝试更改此文件夹的权限,使其可供任何人写入:

drwxrwxrwx  5 ion  staff    160 May 21 05:44 pdf
Run Code Online (Sandbox Code Playgroud)

编辑:请注意,我看到 public_path() 的方法由于某种原因试图保存到我的 vagrant 文件夹中,这是我感到困惑的部分原因。当我尝试在没有 public_path() 的情况下保存到“/pdf”时,出现此错误:

 message: "FPDF error: Incorrect output …
Run Code Online (Sandbox Code Playgroud)

php fpdf fpdi laravel vue.js

7
推荐指数
1
解决办法
1万
查看次数