pdf合到一起java_将多个PDF文件合并/转换为一个PDF

回答(16)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

考虑到 pdfunite 是poppler的一部分,它有更高的安装机会,使用也比 pdftk 简单:

pdfunite in-1.pdf in-2.pdf in-n.pdf out.pdf

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

如果要将所有下载的图像转换为一个pdf,请执行

convert img{0..19}.jpg slides.pdf

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

另外 pdfjoin a.pdf b.pdf 将创建一个新的 b-joined.pdf ,内容为.pdf和b.pdf

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

在搜索了许多可用的pdf库之后,唯一对我有用的是

它需要安装Java 6或更高版本,但工作正常 . Pdftk充满了bug .

var merge = require('easy-pdf-merge');

merge(source_files,dest_file_path,function(err){

if(err)

return console.log(err);

console.log('Success');

});

注意:这不是cmd,但您可以使用命令来运行,例如接受文件名作为命令行参数 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

PDFMerger此应用程序将获取pdf文档列表并合并它们,将结果保存在新文档中 .

用法:java -jar pdfbox-app-x.y.z.jar PDFMerger“源PDF文件(2 ..n)”“目标PDF文件”

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

您可以使用sejda-console,免费和开源 . 解压缩并运行 sejda-console merge -f file1.pdf file2.pdf -o merged.pdf

它保留了书签,链接注释,acroforms等 . 它实际上有很多你可以玩的选项,只需运行 sejda-console merge -h 就可以看到它们 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

其他答案都很好,但如果您无法在本地合并PDF,无论您是在共享托管环境中,还是出于其他原因,它们都无法帮助您 .

如果您正在寻找用于远程合并PDF的API,您可以尝试api2pdf,它具有用于将pdfs合并在一起的 endpoints . 文档是here .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

我有偏见是PyMuPDF(MuPDF的Python绑定)的开发人员之一 .

你可以轻松地用它做你想做的事情(还有更多) . 骨架代码的工作原理如下:

#-------------------------------------------------

import fitz # the binding PyMuPDF

fout = fitz.open() # new PDF for joined output

flist = ["1.pdf", "2.pdf", ...] # list of filenames to be joined

for f in flist:

fin = fitz.open(f) # open an input file

fout.insertPDF(fin) # append f

fin.close()

fout.save("joined.pdf")

#-------------------------------------------------

就是这样 . 有几个选项可用于仅选择页面范围,维护联合目录,反转页面顺序或更改页面旋转等 .

我们在PyPi上 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

我喜欢Chasmo的想法,但我更喜欢使用类似的东西

convert $(ls *.pdf) ../merged.pdf

将多个源文件提供给 convert 会导致将它们合并为一个通用的pdf . 此命令将实际目录中具有 .pdf 扩展名的所有文件合并到父目录中的 merged.pdf .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

这是我使用的一种方法,它易于实现 . 这将需要 fpdf 和 fpdi 库,可在此处下载:

require('fpdf.php');

require('fpdi.php');

$files = ['doc1.pdf', 'doc2.pdf', 'doc3.pdf'];

$pdf = new FPDI();

foreach ($files as $file) {

$pdf->setSourceFile($file);

$tpl = $pdf->importPage(1, '/MediaBox');

$pdf->addPage();

$pdf->useTemplate($tpl);

}

$pdf->Output('F','merged.pdf');

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

下载tar.gz文件并解压缩并运行如下命令

python pdftools-1.1.0/pdfmerge.py -o output.pdf -d file1.pdf file2.pdf file3

您应该在运行上述命令之前安装pyhton3

此工具支持以下内容

添加

插入

删除

旋转

分裂

合并

邮编

您可以在下面的链接中找到更多详细信息,它是开源的

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

pdfunite 可以合并整个PDF . 例如,如果您需要file1.pdf中的2-7页和file2.pdf中的页1,3,4,则必须使用 pdfseparate 将文件拆分为每个页面的单独PDF以提供给 pdfunite .

那时你可能想要一个有更多选项的程序 . qpdf 是我发现用于处理PDF的最佳实用程序 . pdftk 更大更慢,Red Hat / Fedora因为依赖gcj而不打包它 . 其他PDF实用程序具有Mono或Python依赖项 . 我发现 qpdf 产生了比使用 pdfseparate 和 pdfunite 更小的输出文件,将页面组合成30页的输出PDF,970kB和1,6450 kB . 因为它提供了更多选项, qpdf 的命令行并不那么简单;合并file1和file2的原始请求可以执行

qpdf --empty --pages file1.pdf file2.pdf -- merged.pdf

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

对不起,我设法用google找到了答案并且有点运气:)

对于有兴趣的人;

我在我们的debian服务器上安装了pdftk(pdf工具包),并使用以下命令实现了所需的输出:

pdftk file1.pdf file2.pdf cat output output.pdf

要么

gs -q -sPAPERSIZE=letter -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output.pdf file1.pdf file2.pdf file3.pdf ...

这反过来可以直接传送到pdf2ps .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

我推荐了 pdfunite . 然而,当我试图合并> 2k PDF文件时,我得到了 Argument list too long 错误 .

为此我转向Python和两个外部包:PyPDF2(处理所有与PDF相关的事情)和natsort(对目录的文件名进行"natural"排序) . 如果这可以帮助某人:

from PyPDF2 import PdfFileMerger

import natsort

import os

DIR = "dir-with-pdfs/"

OUTPUT = "output.pdf"

file_list = filter(lambda f: f.endswith('.pdf'), os.listdir(DIR))

file_list = natsort.natsorted(file_list)

# 'strict' used because of

# https://github.com/mstamy2/PyPDF2/issues/244#issuecomment-206952235

merger = PdfFileMerger(strict=False)

for f_name in file_list:

f = open(os.path.join(DIR, f_name), "rb")

merger.append(f)

output = open(OUTPUT, "wb")

merger.write(output)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

你可以直接使用convert命令,

例如

convert sub1.pdf sub2.pdf sub3.pdf merged.pdf

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

试试好鬼影:

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=merged.pdf mine1.pdf mine2.pdf

或者甚至通过这种方式获得低分辨率PDF的改进版本(感谢Adriano指出这一点):

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=merged.pdf mine1.pdf mine2.pdf

在这两种情况下输出分辨率比使用转换的这种方式更高更好:

convert -density 300x300 -quality 100 mine1.pdf mine2.pdf merged.pdf

通过这种方式,您不需要安装任何其他东西,只需使用您已安装在系统中的内容(至少在我的rhel中都默认使用) .

希望这可以帮助,

UPDATE: 首先感谢您的所有好评!只是一个可能对你们有用的提示,在谷歌搜索之后,我找到了一个缩小PDF大小的绝佳技巧,我将其缩小为一个300 MB的PDF到15 MB的可接受分辨率!所有这些与好鬼,这里是:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages -dCompressFonts=true -r150 -sOutputFile=output.pdf input.pdf

干杯!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值