我需要将 XMP 数据添加到通过 pypdf 获取的 PDF 文件中。在关于如何通过 pypdf 读取/写入 PDF 文件的 XML 元数据的问题上,KyleBrooks 回答说这是不可能的。但那是 2009 年的事了。现在也许可以使用最新版本的 pypdf 了?
如果没有,您是否知道将 XMP XML 文件嵌入 PDF 文档的其他非商业方法?
我需要将 XMP 数据添加到通过 pypdf 获取的 PDF 文件中。在关于如何通过 pypdf 读取/写入 PDF 文件的 XML 元数据的问题上,KyleBrooks 回答说这是不可能的。但那是 2009 年的事了。现在也许可以使用最新版本的 pypdf 了?
如果没有,您是否知道将 XMP XML 文件嵌入 PDF 文档的其他非商业方法?
gnuplot
我在使用(版本 6.0 补丁级别 1,Microsoft Windows 版本 10.0.19045.5737)生成绘图时遇到了一个奇怪的问题
。我需要将绘图中的colorbox
值反转,即颜色渐变应该从底部的高值到顶部的低值。
我注意到,当使用某些终端时,colorbox
显示完全空白或白色,没有预期的颜色渐变:
wxt
, 成功emf
, 成功pngcairo
, 成功svg
, 成功pdfcairo
, 失败epscairo
, 失败我已附上示例图片:
pngcairo
终端输出
pdfcairo
终端输出
wxt
使用“将图导出到文件”选项从交互式窗口输出为 pdf 。
这是我正在使用的脚本的简化版本:
reset session
set encoding utf8
#set terminal wxt size 800,400 font "Arial,9"
#set terminal pngcairo size 800,400 font "Arial,9"
#set output "diagram.png"
set terminal pdfcairo size 10,5 in font "Arial,14"
set output "diagram.pdf"
set tics out nomirror
unset key
set style circle radius graph 0.01
set style fill transparent solid 1 border lc ls -1
set palette viridis maxcolors 25
set xrange [400:450]
set yrange [100:600]
set xlabel "Temperature/°C"
set ylabel "Index"
set cblabel "Depth (m)"
set cbtics offset -1,0
set multiplot layout 1,2
set title "normal colorbox"
plot "data.txt" u 2:3:1 w circle lc palette
set colorbox invert
set title "inverted colorbox"
replot
unset multiplot
unset output
看起来data.txt
是这样的:
Depth Temp Index
201.05 427.34 251.70
205.24 431.39 296.30
209.24 414.27 185.66
211.89 432.81 140.98
215.54 413.30 299.13
217.17 424.50 272.27
221.00 426.93 184.91
221.50 420.06 241.14
222.95 420.16 467.74
223.60 410.67 196.70
226.39 416.30 166.96
228.87 430.30 437.81
232.22 415.00 343.18
232.23 415.76 494.67
235.17 410.02 224.60
238.31 429.06 302.89
238.37 414.77 367.09
238.49 421.26 195.13
239.36 414.16 161.46
241.46 418.85 263.24
242.76 431.97 378.32
243.17 420.91 154.06
246.77 421.16 135.39
247.30 414.63 411.32
248.97 410.22 146.30
我的脚本/数据有问题或者这是一个错误?
我遇到了一个奇怪的问题,PDF 及其包含的/ToUnicode
CMap 只影响 macOS 预览版,其他测试过的查看器都运行正常。问题是我不知道是包含的/ToUnicode
CMap 有问题还是预览版有问题。
这是有问题的 PDF:https://github.com/user-attachments/files/19538203/example.pdf以及出现此问题的Github 问题。
如果在 macOS 预览版中打开该 PDF,选中并复制文本,则“Hello from HexaPD”之后的所有内容都是错误的。其他查看者可以正常复制整个文本。
当前状态(已编辑):
生成 PDF 的库 HexaPDF 使用了一种优化方法\r
,避免创建包含 ASCII 字符、(
和)
的字符代码\
。原因是,在序列化为 PDF 文字字符串时,需要对这些字符进行转义。
如果关闭此优化,则生成的文件(参见https://github.com/user-attachments/files/19575820/example.pdf)可以在 macOS Preview 中完美运行(即复制和粘贴有效)。
完全删除/ToUnicode
CMap 会导致文本无法复制。这意味着 macOS 预览版确实使用了此 CMap,并且它很可能是罪魁祸首。
添加虚拟条目<0000><0000>
不起作用。
<000D><0044>
向CMap添加虚拟条目/ToUnicode
不起作用。
如果字符代码不是从 1 开始而是从 14 开始,则会导致前 13 个字符无效,即使情况变得更糟。
在阅读了 PDF 规范和“5014 Adobe CMap 和 CIDFont 文件规范”的各个部分后,我认为/ToUnicode
上面两个链接文件中的 CMap 是正确的。
/ToUnicode
如果您能提供任何关于生成的CMap 是否无效或是否是 macOS Preview 的错误见解,我们将不胜感激!
在 RAS-Papercept 中测试 pdf(由 pdflatex 生成)并将其提交给会议之前,我遇到了错误:“错误 1010 无法打开文件”。RAS -Papercept常见问题解答部分的答案没有帮助。
我有许多 PDF 格式的图像,以保留图中图表/文本的分辨率。所有 PDF 图像均从 draw.io/app.diagrams.net 导出
如果我使用 PNG 文件,错误就会消失。但是,我想使用 PDF 图像。任何帮助都将不胜感激。
System: Ubuntu 18.04
Pdflatex: pdfTeX 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian)
pdfinfo 的输出如下:
$ pdfinfo 我的图像.pdf
Producer: cairo 1.15.10
CreationDate: Fri Feb 21 11:04:58 2025 CET
Tagged: no
UserProperties: no
Suspects: no
Form: none
JavaScript: no
Pages: 1
Encrypted: no
Page size: 268.736 x 165.13 pts
Page rot: 0
File size: 5812 bytes
Optimized: no
PDF version: 1.4
$ pdfinfo my_tested_pdf.pdf
Creator: TeX
Producer: pdfTeX-1.40.18
CreationDate: Fri Mar 7 11:58:05 2025 CET
ModDate: Fri Mar 7 11:58:05 2025 CET
Tagged: no
UserProperties: no
Suspects: no
Form: AcroForm
JavaScript: no
Pages: 7
Encrypted: no
Page size: 612 x 792 pts (letter)
Page rot: 0
File size: 1212342 bytes
Optimized: no
PDF version: 1.5
我正在使用 Ghostscript 将 PDF 转换为 PDF/A 文件,效果很好。我想使用该-dSAFER
选项,强制我在文件中对 ICCProfile 使用绝对路径名PDFA_def.ps
:
% in the current directory unless the user modifies the corresponding line below.
% Define entries in the document Info dictionary :
[ /Title (Title) % Customise
/DOCINFO pdfmark
% Define an ICC profile :
/ICCProfile (/var/www/myproject/gs/sRGB2014.icc) % Customise
def
[/_objdef {icc_PDFA} /type /stream /OBJ pdfmark
使用以下命令,我可以使用 GhostScript 转换 PDF:
gs --permit-file-read=/var/www/myproject/gs/ \
-dPDFA=3 \
-dBATCH \
-dNOPAUSE \
-dSAFER \
-sColorConversionStrategy=RGB \
-sDEVICE=pdfwrite \
-sOutputFile=output.pdf \
/var/www/myproject/gs/PDFA_def.ps \
input.pdf
因为这个项目在生产时被转移到不同的文件夹中,所以我正在寻找一种使路径名可配置的方法。因为-dSAFER
我们必须使用绝对路径名,我想。顺便说一下,我是一名 PHP 开发人员,但我对 PostScript 一无所知。
有没有办法将路径传递/var/www/myproject/gs/
到 PostScript 文件中PDFA_def.ps
(这对我来说就足够了)。
尽管有工具可以访问 PDF 元数据,例如pdfinfo
,但我没有找到获取预告片 ID 的正确方法。相反,我使用编辑器并搜索... 所以我的第一个问题是,是否有命令行工具可以为我完成这项工作。
尽管如此,我发现并且感到疑惑:该 ID 有两个部分,预告片如下所示:
trailer << /Info 2 0 R /Root 1 0 R /Size 3656
/ID [<2442556d3492442c8e034f4bf45c46d4><31415926535897932384626433832795>] >>
我对这两个部分 ID 的用途感到疑惑;PDF 规范对此没有说明。在我用 latex 创建的 PDF 中,这两个部分是一致的。
我还想知道为什么有些工具似乎喜欢qpdf
写小写字母,而其他工具(如 latex 编译器)似乎使用大写字母。这使得相等性测试变得困难。
即使调用,qpdf
结果SOURCE_DATE_EPOCH=hex number
也不会改变。...这与乳胶编译器不同。
目前,我正在使用 mPDF 在 PHP 中创建 PDF/A 文件。SVG 默认具有透明背景。但这会破坏与 PDF/A 的兼容性。当使用 veraPDF 验证此类 PDF 文件时,我收到一条错误消息,提示“具有值为 Transparency 的 S 键的 Group 对象不应包含在表单 XObject 中。具有值为 Transparency 的 S 键的 Group 对象不应包含在页面字典中”
我尝试向 SVG 添加一个矩形(如此处所述),但没有成功。有没有解决方案可以删除此透明度,但仍能使用 SVG?
编辑:我使用简单的 FontAwesome 图标作为 SVG,例如地球仪。查看 SVG 代码,我找不到任何不透明度或透明度样式。
我正在开发一个使用旧版 iText-2.1.7 库的遗留项目。我才刚刚开始弄清楚,而且我暂时不会升级到更新的版本,所以我需要有关此版本的帮助。我需要将签名添加到 pdf,这是我的代码:
def postProcessPdf(pdf: Array[Byte], os: OutputStream): Unit = {
val reader = new PdfReader(pdf)
Security.addProvider(new KalkanProvider)
val stamper = PdfStamper.createSignature(reader, os, '\u0000')
val appearance = stamper.getSignatureAppearance
val signDate = Calendar.getInstance
val pdfSignature = new PdfSignature(PdfName.ADOBE_PPKLITE, PdfName.ADBE_PKCS7_DETACHED)
pdfSignature.setDate(new PdfDate(signDate))
pdfSignature.setCert(CryptUtils.cert.getEncoded)
appearance.setCryptoDictionary(pdfSignature)
appearance.setCrypto(null, CryptUtils.chain, null, PdfSignatureAppearance.WINCER_SIGNED)
appearance.setCertificationLevel(PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED)
val estimatedSize = 8192
val exc = new HashMap[PdfName, Int]()
exc.put(PdfName.CONTENTS, estimatedSize * 2 + 2)
appearance.preClose(exc)
val data = appearance.getRangeStream()
val sgn = new PdfPKCS7(null, CryptUtils.chain, null, "SHA256", null, false)
val digest = MessageDigest.getInstance("SHA256","KALKAN")
val dataBytes = IOUtils.toByteArray(data)
digest.update(dataBytes)
val appeareanceHash = digest.digest()
val hashToSign = sgn.getAuthenticatedAttributeBytes(appeareanceHash, appearance.getSignDate(), null)
val signature = Signature.getInstance("SHA256withRSA","KALKAN")
signature.initSign(CryptUtils.privateKey)
signature.update(hashToSign)
val signedHash = signature.sign()
sgn.setExternalDigest(signedHash,null,"RSA")
val encodedPKCS7 = sgn.getEncodedPKCS7(signedHash, appearance.getSignDate())
val paddedSig = new Array[Byte](estimatedSize)
System.arraycopy(encodedPKCS7, 0, paddedSig, 0, encodedPKCS7.length)
val dic = new PdfDictionary()
dic.put(PdfName.CONTENTS, new PdfString(paddedSig).setHexWriting(true))
appearance.close(dic)
}
Adobe Acrobat Reader 中的结果: 图像 错误:文档自签名以来已被更改或损坏。这是什么意思?我该怎么办?提前谢谢您。PDF 文件:链接
我有一个示例图像 pdf,我想从 adobe 获取 drm'ed,对于普通 pdf adobe drm 效果非常好,请找到链接https://www.dropbox.com/scl/fi/cguwslagkh0mol4q5oh0m/sample_image_pdf.pdf?rlkey =s6vrnlrc9ac89jjnfd0w32hyn&st=dlj16950&dl=0 示例图像 pdf。请帮助我如何解决这个问题。
问候克里斯