Я хочу добавить водяной знак в Pdf Stream, используя Itext7 - PullRequest
0 голосов
/ 13 мая 2019

это мой код, который я сейчас использую

var ms = new MemoryStream();

var htmmml = @"<h1>some html string </h1>";

// pdfHTML specific code
ConverterProperties converterProperties = new ConverterProperties();
MemoryStream pdfStream = new MemoryStream(ms.ToArray());
HtmlConverter.ConvertToPdf(htmmml, ms, converterProperties);

PdfDocument pdfDocument = new PdfDocument(new PdfReader(pdfStream), new PdfWriter(pdfStream));
// Document to add layout elements: paragraphs, images etc
Document document = new Document(pdfDocument);

// Load image from disk
ImageData imageData = ImageDataFactory.Create(@"D:\TestWebApp\TestWebApp\imgs\WATERMARK.jpeg");
// Create layout image object and provide parameters. Page number = 1
Image image = new Image(imageData).ScaleAbsolute(100, 200).SetFixedPosition(1, 25, 25);
// This adds the image to the page
document.Add(image);

Дело в том, что после преобразования html в ms, ms удаляется, и я больше не могу получить к нему доступ.Я хочу конвертировать HTML в PDF с водяным знаком.

Ответы [ 2 ]

0 голосов
/ 13 мая 2019

Возможно, вам было бы удобнее использовать convertToDocument или convertToElements методов HtmlConverter.

Первый из них возвращает экземпляр Document который затем можно обработать (например, добавить водяной знак).

Последний возвращает список элементов html, составляющих файл html.Затем вы можете создать Документ и добавить эти элементы в этот документ.

0 голосов
/ 13 мая 2019

Когда MemoryStream закрыт, вы все равно можете извлечь его содержимое, используя метод ToArray, см. Примечание в документации:

Метод MemoryStream.ToArray

...

Этот метод возвращает копию содержимого MemoryStream в виде байтового массива. Если текущий экземпляр был создан на предоставленном байтовом массиве, возвращается копия раздела массива, к которому у этого экземпляра есть доступ. Подробности смотрите в конструкторе MemoryStream.

Примечание

Этот метод работает, когда MemoryStream закрыт.

Таким образом, вам следует разрешить переключать порядок ваших строк

MemoryStream pdfStream = new MemoryStream(ms.ToArray());
HtmlConverter.ConvertToPdf(htmmml, ms, converterProperties);

до

HtmlConverter.ConvertToPdf(htmmml, ms, converterProperties);
MemoryStream pdfStream = new MemoryStream(ms.ToArray());

для pdfStream содержит HtmlConverter.ConvertToPdf для дальнейшей обработки.

...