使用 PHP 为 ADA 编辑 PDF 中的元数据
Editing Metadata in PDFs for ADA with PHP
我有几个 PDF,我需要添加主要语言(对我们来说,它始终是英语,所以 (en-us) 作为文档的目录字典条目)和标题字段,以便我可以让这些 PDF 通过ADA 检查。
我在 PDF 1.4 版上运气不错,对整个文档进行了字符串替换(通过 file_get_contents)并重写了文件,这样我就不会丢失其中的内容,但在 1.5 和 1.6 中PDF 标准,内部甚至 space 并且似乎对制表符敏感。
我尝试通过 shell_exec() 使用 exiftool,但这似乎只适用于 PDF 版本 1.4,其他所有内容都将设置在 PDF 中,但由于像 /Type/Catalog/ViewerPreferences<</DisplayDocTitle true>>
这似乎是在 1.6 的文档中随机设置的。
有没有人试过在网页端解决这个问题?我希望构建一些可以解决一些问题的东西,以减少必须在 Adobe 中打开每个人中的一个并重新保存它们的麻烦。
我试图搜索我可以插入的 Adobe API 或库来进行这些小的编辑。我见过的所有框架都会创建新的 PDF,这意味着我们放入的所有标记和替代文本都将丢失,所以我肯定不想走 Zend 的路线或任何不会编辑元数据的东西。
<?php
$dir = getcwd();
$files = scandir($dir);
foreach($files as $file)
{
if(strpos($file, '.pdf') !== false)
{
$pdf = file_get_contents($dir.'/'.$file);
// This seems to work for 1.4, but not anything else
if(strpos($pdf,'/Lang') === false)
{
echo "Changing Lang on " .$file.PHP_EOL;
$pdf_str = preg_replace("/\/Type \/Catalog/", "/Type /Catalog\n/Lang (en-us)", $pdf);
file_put_contents($dir.'/'.$file, $pdf_str);
}else{
echo "Lang passed on ".$file.PHP_EOL;
}
}
}
?>
永远不要替换 PDF 文件中的字符串,因为这样会破坏文件的整个结构,并且 reader 应用程序需要在打开时修复它。
我们在 PHP 中提供用于编辑 PDF 的商业工具。您的任务可以使用 SetaPDF-Core 组件完成:
require_once('library/SetaPDF/Autoload.php');
$writer = new SetaPDF_Core_Writer_File('result.pdf');
$document = SetaPDF_Core_Document::loadByFilename('example.odf', $writer);
$catalog = $document->getCatalog();
$dict = $catalog->getDictionary();
$dict['Lang'] = new SetaPDF_Core_Type_String('en-us');
$document->save()->finish();
我有几个 PDF,我需要添加主要语言(对我们来说,它始终是英语,所以 (en-us) 作为文档的目录字典条目)和标题字段,以便我可以让这些 PDF 通过ADA 检查。
我在 PDF 1.4 版上运气不错,对整个文档进行了字符串替换(通过 file_get_contents)并重写了文件,这样我就不会丢失其中的内容,但在 1.5 和 1.6 中PDF 标准,内部甚至 space 并且似乎对制表符敏感。
我尝试通过 shell_exec() 使用 exiftool,但这似乎只适用于 PDF 版本 1.4,其他所有内容都将设置在 PDF 中,但由于像 /Type/Catalog/ViewerPreferences<</DisplayDocTitle true>>
这似乎是在 1.6 的文档中随机设置的。
有没有人试过在网页端解决这个问题?我希望构建一些可以解决一些问题的东西,以减少必须在 Adobe 中打开每个人中的一个并重新保存它们的麻烦。
我试图搜索我可以插入的 Adobe API 或库来进行这些小的编辑。我见过的所有框架都会创建新的 PDF,这意味着我们放入的所有标记和替代文本都将丢失,所以我肯定不想走 Zend 的路线或任何不会编辑元数据的东西。
<?php
$dir = getcwd();
$files = scandir($dir);
foreach($files as $file)
{
if(strpos($file, '.pdf') !== false)
{
$pdf = file_get_contents($dir.'/'.$file);
// This seems to work for 1.4, but not anything else
if(strpos($pdf,'/Lang') === false)
{
echo "Changing Lang on " .$file.PHP_EOL;
$pdf_str = preg_replace("/\/Type \/Catalog/", "/Type /Catalog\n/Lang (en-us)", $pdf);
file_put_contents($dir.'/'.$file, $pdf_str);
}else{
echo "Lang passed on ".$file.PHP_EOL;
}
}
}
?>
永远不要替换 PDF 文件中的字符串,因为这样会破坏文件的整个结构,并且 reader 应用程序需要在打开时修复它。
我们在 PHP 中提供用于编辑 PDF 的商业工具。您的任务可以使用 SetaPDF-Core 组件完成:
require_once('library/SetaPDF/Autoload.php');
$writer = new SetaPDF_Core_Writer_File('result.pdf');
$document = SetaPDF_Core_Document::loadByFilename('example.odf', $writer);
$catalog = $document->getCatalog();
$dict = $catalog->getDictionary();
$dict['Lang'] = new SetaPDF_Core_Type_String('en-us');
$document->save()->finish();