我无法在acrobat Reader上打开this pdf file,它告诉我错误(法语),而没有代码错误。当在Acrobat Reader中打开opne pdf文件时,如何获取有关错误警报的更多信息,是否有捷径显示有关错误的更多信息,因为当前仅以法语显示:
“读取文档时发生错误,它可能已被纠正并且无法 修复”
在chrome pdf查看器中,我可以打开此error-original.pdf
PS:这是另一个ok-original.pdf,在使用acrobat阅读器打开时可以使用。
Windows 10上的Im,acrobat Reader版本:19.10.20098.316574
我无法解释为什么我的文件error-original.pdf可能由于pdfbox的某些操作而损坏,但无法复制。我的问题是如何获取有关此错误的更多错误信息。
这是我用来准备/操作原件的代码.pdf 此代码执行4件事: 1.设置字段的partialName(与当前字段值相同) 2.删除页面中的所有链接 3.删除带有空||空白值的字段 4.使用@mkl方法OptimizeAfterMerge.java
进行临时压缩以尝试偶然获取一些八位位组Document pdfOriginal = PDDocument.load(f.toFile());
//1.set field partialName like his current value
pdfOriginal.getDocumentCatalog().getAcroForm().getFields().forEach(field -> {
if (field instanceof PDTextField && !field.getValueAsString().contains("--")
&& !field.getValueAsString().isBlank() && !field.getValueAsString().isEmpty()) {
field.setPartialName(field.getValueAsString());
}
});
//2.remove all link in document
removeLinksInPages(pdfOriginal);
//3.remove field with empty||blank value
pdfOriginal.getDocumentCatalog().getAcroForm().getFields().forEach(field -> {
if (field instanceof PDTextField
&& (field.getValueAsString().isBlank() || field.getValueAsString().isEmpty())) {
try {
removeField(pdfOriginal, field.getPartialName());
} catch (IOException e) {
e.printStackTrace();
}
}
});
pdfOriginal.save(new File(f.toAbsolutePath().toString()));
pdfOriginal.close();
//4.try to compress to gain some octets
PDDocument compress = PDDocument.load(f.toFile());
OptimizePdfDocument.optimize(compress);
compress.save(new File(f.toAbsolutePath().toString()));
compress.close();
使用的方法:
我无法确认此代码始终输出正确的文件,因为它不会,但是有时如果我使用acrobat Reader打开文件,则无法读取。
(发送给@mkl的消息:相信我,我在这里没有告诉您方法损坏的文件之一,并且我知道您的压缩是针对合并文件的,请不要担心,我当然以错误的方式做事并尝试查找问题,感谢您的理解)
我遇到了奇怪的事情:仅在the above corrupted file error-original.pdf上运行此pdfbox代码:
PDDocument pdfOriginal = PDDocument.load(new File(".../error-original.pdf"));
pdfOriginal.save(new File(".../error-original.pdf"));
pdfOriginal.close();
Acrobat Reader能够打开输出(未修改的pdf文件),但是当您滚动acrobat Reader时,出现另一个错误:“此页面有错误,acrobat reader无法显示此页面。请与pdf作者联系以解决问题”以及当我关闭error-alert-popup,我可以继续滚动并阅读pdf。 您可以尝试使用Acrobat Reader打开此error-on-scroll.pdf
ps:发给@acrobatreader的消息:问题是我是PDF作者,我不知道如何解决(笑话)
@KenS,请您为此提供一些输入,看来错误在第2页上
答案 0 :(得分:1)
当Acrobat显示错误时,您可以尝试按住Control键(在Windows上),同时单击“确定”按钮。有时这可以为您提供更多信息。
在这种情况下不是。文件严重损坏。它已经被编辑了至少两次,并且编辑看起来已经破坏了文件,无法简单修复。该文件包含:
startxref
81612
,它应该指向外部参照表的开始(其中包含所有对象在文件中的偏移量)。而是文件偏移指向:
C89E1E8B69>]/Index[4 2 10 1 156 2]/Info 5 0 R/Length 31/Prev 77185/Root 1 0 R/Size 158/Type/XRef/W[1 3 0]>>stream
这是交叉引用流中的一部分。尾部字典包含一个/ Prev条目,该条目应指向先前的外部参照,相反,它再次指向外部参照流的特定用法。更正该错误之后,它指向预告字典,该预告字典又有一个/ Prev条目不正确。
无论您使用什么来编辑此文件,它都以相同的方式不断破坏它。
我可以修复这些偏移,这使Ghostscript可以打开和读取文件(MuPDF甚至可以修复原始文件)。它仍然抱怨外部参照无效,并尝试修复。在修复过程中,发现某些PDF对象具有相同的对象编号和世代编号,而事实并非如此。
由于Acrobat无法打开已修复的文件,因此可能也是Acrobat抱怨的。似乎文件的两次编辑都包含了对象4、5和10的新定义,但是没有增加它们的世代编号,使它们保持为0,因此彼此重复。
从根本上讲,如果Acrobat无法打开您的文件,则应将其视为完全损坏。
答案 1 :(得分:0)
Ken's answer ...
的推论文件中存在三个修订版本(即,文件具有初始版本和两个增量更新)。由于您的PDFBox代码仅保存为全新文件,而不使用增量更新,因此PDFBox代码的最终结果已经在该第一修订版中。
此外,原始文件“ ok-original.pdf”是使用交叉引用表保存的,而结果文件中的所有修订版仅使用交叉引用流。
由于您的PDFBox代码使用与加载文件时相同的交叉引用技术来保存文件(默认为PDFBox),这意味着即使第一个修订版也不是PDFBox的立即输出,而是其他人再次加载和存储的输出程序,可能是Adobe Acrobat,从而改变了这项技术。
因此,您甚至在初始版本中都看不到确切的PDFBox输出,而只能看到下一个程序的输出。因此,特别是PDFBox不负责在交叉引用流中构建交叉引用偏移量,也不负责这些交叉引用流本身的偏移量。
正如KenS在他的回答中所解释的, startxref 和 Prev 条目中交叉引用流对象的偏移太大;更确切地说,对于初版而言,它们太大了,对于第二版来说,它们太大了,对于第二版来说,它们太大了,对于第二版来说,它们太大了,对于第二版来说,它们的大小对于整个PDF来说,太大了131。
PDFBox(参见上文)尚未创建这些交叉引用流,更不用说它们的偏移值了。因此,您的PDFBox代码不对错误的偏移量负责!
如果Adobe Acrobat是生成了这三个修订的程序,我也将怀疑Adobe Acrobat造成了错误的偏移量。
在我看来,之后文件已被某个程序复制或传输,或者通过某个通道从文件中删除了一些字节,第一个修订版中为116个字节,第二个版本中为6个字节,第三个版本中为9个字节,
(这种下降也可能是由于多个字节合并为更少的字节而导致的...)
答案 2 :(得分:0)
也许<?php $_COOKIE['PageNo'] = 3; ?>
的pdf除 <?php
session_start();
require "includes/dbh.inc.php";
?>
<?php
echo $_COOKIE['PageNo'];
//$_COOKIE['PageNo'] = 5; //Commented out, for testing
if (!isset($_COOKIE['PageNo'])){
setcookie("PageNo", 1, time() + (86400 * 30), "/"); // 86400 = 1 day, so set the cookie for a month long period
}
?>
<!doctype html>
<html lang="en" prefix="og: http://ogp.me/ns#">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>iStudy University | Stress & Anxiety</title>
<link rel="stylesheet" type='text/css' media='all' href="webslides.css" rel="stylesheet">
<body>
<script src="static/js/webslides.js"></script>
<!-- BEGINNING OF SLIDES -->
<?php
if($_COOKIE['PageNo'] >= 2)
{
?>
<script>
window.location.replace("<?php echo "istudy_university.php#slide=".$_COOKIE['PageNo']; ?> ");
</script>
<?php
}
else
{
?>
<script>
window.location.replace("istudy_university.php#slide=1");
</script>
<?php
}
?>
<main role="main">
<article id="webslides">
<!-- SLIDE 1 -->
<section class="bg-apple aligncenter">
<span class="background dark" style="background-image: url('istudy_slides_images/abstract.jpg')"/></span>
<div class="wrap" id="slide=1">
<h1 class="text-landing">Stress & Anxiety</h1>
<br>
<br>
<br>
<hr id="hor-rule">
<h1 class="slides-logo">iStudy University <i class="fas fa-graduation-cap"></i></h1>
<h2 class="slogan">Designed by Students <br><span class="iv">IV</span> <br>Students</h2><br><br>
</div>
</section>
<!-- SLIDE 2 -->
<?php $_COOKIE['PageNo'] = 2; ?>
<section class="aligncenter">
<span class="background light" style="background-image: url('istudy_slides_images/mountain.jpg')"/></span>
<div class="wrap" id="slide=2">
<blockquote class="quote">
<p class>"No one can create negativity or stress within you. Only you can do that by virtue of how you process your world"</p>
<p><cite>Wayne Dyer</cite></p>
</blockquote>
</div>
</section>
<!-- SLIDE 3 -->
<?php $_COOKIE['PageNo'] = 3; ?>
<section class="bg-slide3">
<div class="wrap size-80" id="slide=3">
<h3 class="title stessAnx"><strong> Stress & Anxiety</strong></h3><br>
<p>Stress and anxiety are common experiences of students in higher education.<br>This module will introduce you to evidence based techniques for managing stress and anxiety based upon cognitive behavioural therapy (CBT).</p>
</section>
</div>
之外还具有/ Prev
但我转载并找到解决方法:
这里的问题是GIT,在我的项目中,从远程获取文件时,好像将pdf文件像文本一样对待,而是二进制。仅添加内容为error-original.pdf
的.gitattributes文件后,即可解决此问题。
因此,恢复:
Pdf作者(在其本地计算机上)正在使用pdf。
pdf作者commit +推送到远程。
另一个用户从远程拉出更改并尝试打开pdf:这导致“文件损坏”。
在.gitignore级别添加.gittattributes解决了问题。
PS:但是@mkl和Kens所说的所有事情也保持正确。