你能告诉我,我的代码出了什么问题吗?我用它来合并PDF,我创建一个内存流,然后将其输出到PDF。它对我来说很好,但一些用户无法在IE中下载文件,或者在Chrome中出现网络错误:
public static MemoryStream MergePdfForms(List<byte[]> files)
{
if (files.Count > 1)
{
PdfReader pdfFile;
Document doc;
PdfWriter pCopy;
MemoryStream msOutput = new MemoryStream();
pdfFile = new PdfReader(files[0]);
doc = new Document();
pCopy = new PdfSmartCopy(doc, msOutput);
doc.Open();
for (int k = 0; k < files.Count; k++)
{
pdfFile = new PdfReader(files[k]);
for (int i = 1; i < pdfFile.NumberOfPages + 1; i++)
{
((PdfSmartCopy)pCopy).AddPage(pCopy.GetImportedPage(pdfFile, i));
}
pCopy.FreeReader(pdfFile);
}
pdfFile.Close();
pCopy.Close();
doc.Close();
return msOutput;
}
else if (files.Count == 1)
{
return new MemoryStream(files[0]);
}
return null;
}
调试后,我注意到内存流msOutput有一些错误:
是什么导致了它,以及如何避免它?
谢谢你。
将CloseStream
设置为false
,否则当您调用pCopy时输出流将被关闭。关闭()
。
pCopy = new PdfSmartCopy(doc, msOutput) { CloseStream = false };
我在互联网上没有发现留档,所以我不得不直接查看源代码。
这是PdfSmartCopy
类的声明:
public class PdfSmartCopy : PdfCopy
{
// ...
public PdfSmartCopy(Document document, Stream os) : base(document, os) {
// ...
}
// ...
}
以下是PdfCopy类的声明:
public class PdfCopy : PdfWriter
{
// ...
public PdfCopy(Document document, Stream os) : base(new PdfDocument(), os) {
// ...
}
// ...
}
PdfWriter
类的声明:
public class PdfWriter : DocWriter,
IPdfViewerPreferences,
IPdfEncryptionSettings,
IPdfVersion,
IPdfDocumentActions,
IPdfPageActions,
IPdfIsoConformance,
IPdfRunDirection,
IPdfAnnotations
{
// ...
protected PdfWriter(PdfDocument document, Stream os) : base(document, os) {
// ...
}
// ...
}
最后,DocWriter类的声明:
public abstract class DocWriter : IDocListener
{
// ...
// default value is true
protected bool closeStream = true;
public virtual bool CloseStream {
get {
return closeStream;
}
set {
closeStream = value;
}
}
protected DocWriter(Document document, Stream os)
{
this.document = document;
this.os = new OutputStreamCounter(os);
}
public virtual void Close() {
open = false;
os.Flush();
if (closeStream) // <-- Take a look at this line
os.Close();
}
// ...
}
我试图通过文件上传合并来自JSP页面的两个PDF文档。我正在获取文件,将它们放入列表中,但当我试图读取它们以进行合并时,我收到了一条“流已关闭”的消息。我搜索了很多关于这个例外的回复,但没有一个有帮助。所以,再说一遍,不确定它在哪里失败。 以下是Java代码: 我在线路上遇到了一个例外: 例外情况: 确切的问题是什么?正在关闭的inputStream在哪里? ===================
我没有设置密码。我该如何解决这件事?
我想让具有多个内部类的抽象类对其进行扩展,并可以通过静态方法创建其内部类的实例,但我得到编译器错误“无法访问ITask类型的封闭实例。必须使用ITask类型的封闭实例限定分配(例如,x.new A(),其中x是ITask的实例)。” 我发现内部类应该由外部类的实例创建,但是我的外部类有抽象方法,我不能创建它的实例。我创建了扩展父类的内部类,因为我习惯于控制它们的创建。那么有没有办法让我的模式发挥作
我正在做一个实验2D物理的个人项目。现在,我正在尝试设置JFrame,以便它每秒更新60次。但是,当我调用方法开始更新JFrame时,我不能关闭JFrame。但是如果我省略了调用方法的部分,我可以关闭JFrame。这是主要代码: 这是Frame的代码: 如果我不在start()中调用updater(),我可以关闭JFrame。我知道我离开running=true,但它仍然应该关闭,因为这在我的旧计
我有一个叫做GreenhouseControls的类,它有很多 内置于其中的类,例如: 我从文本文件中提取值以获取事件名称(如“ThermostatNight”)和时间值(如“2000”)。为了用这些值实例化一个新对象,我构建了一个EventFactory,它接受这些值作为参数。 这是我构建的类,用于从文本文件值创建新的事件对象: 当我运行这个程序时,一切都运行得很好,直到我将EventFacto
给出这段代码,其中包含一个类及其方法.这是我们的主要关注点: 在IntelliJ IDEA中运行此代码不会返回任何编译错误,但会成功返回输出。我的问题是:为什么这不是一个不可达的语句? 删除语句后运行循环(但保留如下所示: (...)会返回这样的错误,因为最后的< code>sout永远不会被打印出来。为什么第一种情况也不会出现这种情况?我确信这不是运行时的问题,因为编译器肯定看到整数< code