如何使用itext7在内存流中创建PDF而不是物理文件?我不知道如何在最新版本中做到这一点,有帮助吗?
我尝试了以下代码,但pdfSM没有正确填充:
string filePath = "./abc.pdf";
MemoryStream pdfSM = new ByteArrayOutputStream();
PdfDocument doc = new PdfDocument(new PdfReader(filePath), new PdfWriter(pdfSM));
.......
doc.close();
完整的测试代码如下所示供您参考,它在通过filePath进入PdfWriter时有效,但不适用于内存流:
public static readonly String sourceFolder = "../../FormTest/";
public static readonly String destinationFolder = "../../Output/";
static void Main(string[] args)
{
String srcFilePattern = "I-983";
String destPattern = "I-129_2014_";
String src = sourceFolder + srcFilePattern + ".pdf";
String dest = destinationFolder + destPattern + "_flattened.pdf";
MemoryStream returnSM = new MemoryStream();
PdfDocument doc = new PdfDocument(new PdfReader(src), new PdfWriter(returnSM));
PdfAcroForm form = PdfAcroForm.GetAcroForm(doc, false);
foreach (PdfFormField field in form.GetFormFields().Values)
{
var fieldName = field.GetFieldName();
var type = field.GetType();
if (fieldName != null)
{
if (type.Name.Equals("PdfTextFormField"))
{
field.SetValue("T");
}
}
}
form.FlattenFields();
doc.Close();
}
我也需要同样的东西。让它像这样工作:(我包括了一些提高性能的设置)
string HtmlString = "<html><head></head><body>some content</body></html>";
byte[] buffer;
PdfDocument pdfDoc = null;
using (MemoryStream memStream = new MemoryStream())
{
using(PdfWriter pdfWriter = new PdfWriter(memStream, wp))
{
pdfWriter.SetCloseStream(true);
using (pdfDoc = new PdfDocument(pdfWriter))
{
ConverterProperties props = new ConverterProperties();
pdfDoc.SetDefaultPageSize(PageSize.LETTER);
pdfDoc.SetCloseWriter(true);
pdfDoc.SetCloseReader(true);
pdfDoc.SetFlushUnusedObjects(true);
HtmlConverter.ConvertToPdf(reader, pdfDoc, props));
pdfDoc.Close();
}
}
buffer = memStream.ToArray();
}
return buffer;
iText7、C#控制器
错误:
public ActionResult Report()
{
//...
doc1.Close();
return File(memoryStream1, "application/pdf", "pdf_file_name.pdf");
}
工作:
public ActionResult Report()
{
//...
doc1.Close();
byte[] byte1 = memoryStream1.ToArray();
return File(byte1, "application/pdf", "pdf_file_name.pdf");
}
我不知道为什么。。。但是,它起作用了!
另一个:链接
这对我有用。
public byte[] CreatePdf()
{
var stream = new MemoryStream();
var writer = new PdfWriter(stream);
var pdf = new PdfDocument(writer);
var document = new Document(pdf);
document.Add(new Paragraph("Hello world!"));
document.Close();
return stream.ToArray();
}
我正在Windows服务器上使用C#处理存储在IIS服务器上的web应用程序。 null
问题内容: 如果我这样做: 然后创建文件,并始终返回“文件存在”。是否可以不创建文件就检查文件是否存在? 编辑: 我忘了提到它处于for循环中。所以这是真实的东西: 问题答案: 实例化a时,您并没有在磁盘上创建任何东西,而只是构建了一个可以调用某些方法的对象,例如。 既好又便宜,不要试图避免这种实例化。 该实例只有两个字段: 这是构造函数: 如您所见,实例只是路径的封装。创建它以便进行调用是继续进
我想检查文件是否存在,并尝试使用以下函数 但是,它似乎不能正常工作,因为不是检查文件的存在而是创建文件!这里有什么问题? 请注意,我被迫使用C 98标准,无法使用include
我正在将一些旧的iTextSharp代码升级到新的iText 7库。我很难确定将2个PDF MemoryStream合并为一个PDF MemoryStream的正确方法,该PDF MemoryStream包含来自两个源PDF MemoryStream的所有页面。这看起来很简单,我认为下面的代码设置正确,但生成的PDF内存流只包含第一个文件。第二个PDF文件从未出现,也从未连接到第一个PDF文件。
一些背景 我正在解决一个问题,我将集合存储在hashmap中,其中键是集合名,即Set1-- 该程序的目的是从用户那里取一个值作为“阈值”,即2,它用于集合之间的最小共性。如果达到或超过阈值,程序建议集合之间合并。 我已经创建了一个组合生成器,它将生成集合名称之间的所有可能组合,以便与未考虑的顺序进行比较,即(Set1,Set2,),(Set1,Set3),(Set2,Set3),(Set1,Se
我试图从多个内存流生成一个PDF文件,但在确定将2个PDF MemoryStream合并为一个PDF MemoryStream的正确方法时遇到了很多困难,该PDF MemoryStream包含来自两个源PDF MemoryStream的所有页面。这看起来很简单,我认为下面的代码设置正确,但生成的PDF内存流并不包含这两个文件的组合。 我很难确定将2个PDF MemoryStream合并为一个PDF