У меня есть метод, который возвращает поток байтов PDF (из заполняемого pdf). Есть ли прямой способ объединить 2 потока в один поток и сделать из него один pdf-файл? Мне нужно запустить мой метод дважды, но вам нужны два pdf-файла в один поток PDF. Благодарю.Объединить 2 потока байтов pdf с использованием Itextsharp
ответ
Вы не сказали, если вы уплощение заполненных форм с PdfStamper
, так что я просто сказать, что вы должны Свести перед тем пытается объединить их. Вот рабочий HTTP-обработчик .ashx:
<%@ WebHandler Language="C#" Class="mergeByteForms" %>
using System;
using System.IO;
using System.Web;
using iTextSharp.text;
using iTextSharp.text.pdf;
public class mergeByteForms : IHttpHandler {
HttpServerUtility Server;
public void ProcessRequest (HttpContext context) {
Server = context.Server;
HttpResponse Response = context.Response;
Response.ContentType = "application/pdf";
using (Document document = new Document()) {
using (PdfSmartCopy copy = new PdfSmartCopy(
document, Response.OutputStream))
{
document.Open();
for (int i = 0; i < 2; ++i) {
PdfReader reader = new PdfReader(_getPdfBtyeStream(i.ToString()));
copy.AddPage(copy.GetImportedPage(reader, 1));
}
}
}
}
public bool IsReusable { get { return false; } }
// simulate your method to use __one__ byte stream for __one__ PDF
private byte[] _getPdfBtyeStream(string data) {
// replace with __your__ PDF template
string pdfTemplatePath = Server.MapPath(
"~/app_data/template.pdf"
);
PdfReader reader = new PdfReader(pdfTemplatePath);
using (MemoryStream ms = new MemoryStream()) {
using (PdfStamper stamper = new PdfStamper(reader, ms)) {
AcroFields form = stamper.AcroFields;
// replace this with your form field data
form.SetField("title", data);
// ...
// this is __VERY__ important; since you're using the same fillable
// PDF, if you don't set this property to true the second page will
// lose the filled fields.
stamper.FormFlattening = true;
}
return ms.ToArray();
}
}
}
Надеемся, что встроенные комментарии имеют смысл. _getPdfBtyeStream()
выше моделирует ваши потоки байтов PDF. Причина, по которой вам нужно установить FormFlattening
в true
, заключается в том, что при заполнении полей формы PDF имена должны быть уникальными. В вашем случае вторая страница представляет собой одну и ту же заполняемую форму PDF, поэтому она имеет те же имена полей, что и первая страница, и когда вы их заполняете, они игнорируются. Выполните приведенную выше примерную строку:
stamper.FormFlattening = true;
чтобы посмотреть, что я хочу сказать.
Другими словами, много общего кода для слияния PDF-файлов в Интернете и даже здесь, на StackOverflow не будет работать (для заполняемых форм), потому что Acrofield
s не учитываются для. Фактически, если вы посмотрите на stackoverflow's about itextsharp tag «SO FAQ & Популярные» до Merge PDFs, это упоминается в третьем комментарии для правильно обозначенного ответа @Ray Cheng.
Другим способом слияния заполняемого PDF (без сглаживания формы) является переименование полей формы для второй/следующей страницы, но это больше работает.
Спасибо Kuujinbo за ответ и объяснение. – user282807
Cheers dude, отличный материал –
- 1. Объединить 2 PDF массивы байтов в 1
- 2. Объединить зашифрованные Pdf-файлы с iTextSharp
- 3. высота pdf с использованием itextsharp
- 4. создать pdf с использованием потока байтов в android
- 5. ошибка при создании PDF с использованием ItextSharp
- 6. Добавление pdf-файла в существующую коллекцию PDF с использованием iTextSharp
- 7. Экспорт HTML в PDF с использованием ITextsharp
- 8. экспорт в pdf с использованием itextsharp
- 9. Чистое вращение PDF с использованием Itextsharp
- 10. идентифицировать абзацы pdf-файлов с использованием itextsharp
- 11. Поворот PDF с использованием Powershell и iTextSharp
- 12. Подписание pdf с использованием itextsharp 5.4.4 - пример
- 13. изображение центра в pdf с использованием itextsharp
- 14. Вывод PDF с использованием потока
- 15. iTextSharp создание pdf-файла из списка массивов байтов
- 16. PDF Объединение по ItextSharp
- 17. Сжатие PDF с помощью iTextSharp
- 18. iTextsharp PDF Document Properties
- 19. PDF checkboxes с iTextsharp
- 20. Сплит PDF в несколько PDF-файлов с использованием iTextsharp
- 21. C# Объединить 2 потока в один
- 22. Объединить PDF-файлы с помощью iTextSharp в потоке
- 23. 2 Ярлыки рассылки столбцов в itextsharp PDF
- 24. Флажок с использованием ITextSharp
- 25. Сохранение 2 копий PDF-шаблона, 2-й файл поврежден - iTextSharp
- 26. GridviewRow в PDF с iTextSharp
- 27. Объединение файлов N PDF, созданных из html с использованием ITextSharp, в другой пустой файл pdf
- 28. Проблема с добавлением javascript в PDF с использованием iTextSharp
- 29. Добавить закладку в pdf с помощью itextsharp
- 30. iTextsharp Ошибка генерации PDF
Являются ли потоки байтов iTextSharp? Являются ли отдельные байтовые потоки из двух разных заполняемых форм или одной формы? Если они исходят из одной формы, вы их сгладили? – kuujinbo
Забудьте о потоках байтов на мгновение. Действительно ли ваш вопрос «как объединить два PDF-файла в один?» –
Это тот же заполняемый PDF. Я использовал Itexsharp pdf stamper. Прямо сейчас, используя его в asp.net и передавая этот PDF-файл в браузер. Поэтому мне нужно также вызвать мой метод, который передает один и тот же PDF-документ, но дает разные данные и помещает eevrything в один поток. Таким образом, тот же PDF-файл будет отображаться дважды как один PDF-файл. – user282807