如何以编程方式搜索和替换大量PDF文件中的某些文本? 我想删除已添加到一组文件中的 URL。 我已经能够在Adobe Pro的批处理下使用javascript删除链接,但链接文本仍然存在。 我已经看到了使用文本修饰的建议,它可以手动工作,但我不想手动修改 1300 个文件。
由于文档格式的图形性质,在 PDF 中查找文本本来就很困难 - 您正在搜索的字母在文件中可能不是连续的。 也就是说,CAM::P DF具有一些搜索替换功能和启发式方法。 试一试 changepagestring.pl,看看它是否适用于您的 PDF。
要安装:
$ cpan install CAM::PDF
# start a new terminal if this is your first cpan module
$ changepagestring.pl input.pdf oldtext newtext output.pdf
我也变得绝望了。经过 10 次 PDF 编辑器安装,所有这些都需要花钱,但没有成功:
pdftk + 编辑器就足够了:
替换 PDF 文件中的文本
-
使用 pdftk 解压缩 PDF 页面流
pdftk original.pdf output original.uncompressed.pdf uncompress
-
替换文本(有时此有效,有时不起作用(在
original.uncompressed.pdf
-
修复修改后的(现在已损坏(.PDF
pdftk original.uncompressed.pdf output original.uncompressed.fixed.pdf
(来自乔尔·达雷(
我刚刚完成了对由带有变音符号的文本组成的文本的中缀的尝试,希望生成另一个文本,其中带有双音调符号和组合音调符号的字符被替换为带有单个变音符号的替代。对于不关心理解编程解决方案工作的麻烦的人来说,Infix 绝对是一个很好的解决方案。所有请求更改均已生效。仍然需要了解如何影响更改文本布局的单词重排。
您可以使用Adobe Acrobat Pro中的"编辑"功能,一步查找和替换单个文档中的所有引用。不确定是否可以自动执行多个步骤。
http://help.adobe.com/en_US/Acrobat/9.0/Professional/WS5E28D332-9FF7-4569-AFAD-79AD60092D4D.w.html
这只是一半的解决方案,但我将Touch up与AppleScript对发送击键的支持结合使用,以替换数千个表格单元格中的字符串。根据您的页面布局方式,它可能适合您。就我而言,我不得不在每个表的开头手动插入光标(数十个表格 - 对于手动过程来说非常容易管理(,但之后我自动替换了数千个单元格。
不确定当有一个程序可以为您完成时,我是否要做所有的工作来编写代码来修改您的 1300 个文件。 前几天,我使用Infix的专业版使用其"在文件中查找和替换"功能批量修改了近100个文件。 效果很好。 我已经评估了其他程序,希望找到类似于Microsoft Word的查找和替换功能。 Infix是我发现唯一可以做到这一点的人。 退房: http://www.iceni.com/infix-pro.htm
问题是关于编程解决方案的,但我仍然会分享这个免费的在线工具,它帮助我批量替换了一些 PDF 文件中的文本:
http://www.pdfdu.com/pdf-replace-text.aspx
替换文本后,我没有注意到生成的PDF文件有任何广告或其他修改。
我无法使用我尝试的软件在本地进行更改。我认为主要问题是我丢失了 PDF 中使用的字体,即使使用 Acrobat Pro 也无法正常工作。在线工具没有抱怨并产生了很好的结果。
我建议你可以使用VeryPDF PDF文本替换器命令行软件批量替换PDF页面中的文本,你可以运行pdftr.exe轻松替换PDF页面中的文本,例如,
pdftr.exe -contentreplace "My Name=>Your Name" D:\in.pdf D:\out.pdf
pdftr.exe -searchandoverlaytext "My Name=>Your Name" D:\in.pdf D:\out.pdf
pdftr.exe -searchandoverlaytext "My Name=>D:\temp\myname.png*20*20" D:\in.pdf D:\out.pdf
pdftr.exe -页面范围 1-3 -内容替换"旧文本=>新文本||非常PDF=>VeryDOC||我的名字=>你的名字" D:\in.pdf D:\out.pdf
pdftr.exe -searchtext "string" C:\in.pdf
pdftr.exe -pagerange 1 -searchtext "string" C:\in.pdf
pdftr.exe -pagerange 1 -searchandoverlaytext "Old Text=>New Text||非常PDF=>VeryDOC||我的名字=>你的名字" D:\in.pdf D:\out.pdf
pdftr.exe -overlaytextfontname "Arial" -overlaytextcolor FF0000 -overlaybgcolor 00FF00 -searchandoverlaytext "Old Text=>New Text||非常PDF=>VeryDOC||我的名字=>你的名字" D:\in.pdf D:\out.pdf
pdftr.exe -opw 123 -upw 456 -contentreplace "Old Text=>New Text||非常PDF=>VeryDOC||我的名字=>你的名字" D:\in.pdf D:\out.pdf
pdftr.exe -searchandoverlaytext "PDFcamp Printer=>VeryPDF Printer" -overlaytextfontsize 8 D:\in.pdf D:\out.pdf
pdftr.exe -searchandoverlaytext "PDFcamp Printer=>VeryPDF Printer" -overlaytextfontsize 80% D:\in.pdf D:\out.pdf
似乎即使使用未压缩的pdf,文本有时也会被格式化为时髦。 这使得"正常"文本替换,sed
,不起作用或不是微不足道的。
我找不到任何似乎适用于字形间距偏移量的东西,即看起来像这样的文本(这在 pdf 中似乎很常见(,在这个例子中,"其他信息"一词存储如下:
[(O)-16(ther i)-20(nformati)-11(on )]TJ
我试图自己编写一个满足这一点的工具。 它适用于常见用例。 在这里查看。
首先解压缩你的pdf,然后cd到签出的git代码,然后:
语法
$ crystal replaceinpdf.cr input_filename.pdf "something you want replaced" "what you want it replaced with" output_filename.pdf
享受! 欢迎提出要求。
虽然这是一个相当古老的线程。只是想分享一个 Node.js 包选项来搜索和替换 PDF 中的文本:Aspose.PDF Cloud SDK for Node.js。它是付费产品,但它每月提供 150 次免费的 API 调用。
const { PdfApi } = require("asposepdfcloud");
const { TextReplaceListRequest }= require("asposepdfcloud/src/models/textReplaceListRequest");
const { TextReplace }= require("asposepdfcloud/src/models/textReplace");
// Get Client ID and Client Secret from https://dashboard.aspose.cloud/
pdfApi = new PdfApi("xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx", "xxxxxxxxxxxxxxxxxxxxxx");
var fs = require('fs');
const name = "02_pages.pdf";
const remoteTempFolder = "Temp";
//const localTestDataFolder = "C:\Temp";
//const path = remoteTempFolder + "\" + name;
//const outputFile= "Replace_output.pdf";
// Upload File
//pdfApi.uploadFile(path, fs.readFileSync(localTestDataFolder + "\" + name)).then((result) => {
// console.log("Uploaded File");
// }).catch(function(err) {
// Deal with an error
// console.log(err);
//});
const textReplace= new TextReplace();
textReplace.oldValue= "origami";
textReplace.newValue= "aspose";
textReplace.regex= false;
const textReplace1= new TextReplace();
textReplace1.oldValue= "candy";
textReplace1.newValue= "biscuit";
textReplace1.regex= false;
const trr = new TextReplaceListRequest();
trr.textReplaces = [textReplace,textReplace1];
// Replace text
pdfApi.postDocumentTextReplace(name, trr, null, remoteTempFolder).then((result) => {
console.log(result.body.code);
}).catch(function(err) {
// Deal with an error
console.log(err);
});
//Download file
//const outputPath = "C:/Temp/" + outputFile;
//pdfApi.downloadFile(path).then((result) => {
// fs.writeFileSync(outputPath, result.body);
// console.log("File Downloaded");
//}).catch(function(err) {
// Deal with an error
// console.log(err);
//});
该库具有广泛的支持。看看吧。
PDF-LIB