@festvtteam

Добавление текста в существующий pdf — почему переворачивает текст или зеркалит его?

Добрый день!
Необходимо в файлы пдф вписать строки. Использую такой код (из plm-системы):
public void AddText3 (FileDesc fDesc, MemoryStream outputPdfStream)
{
	using (var input PdfStream = new MemoryStream())
	using (var srcStream = fDesc. DownloadingDataStream )
	{
		srcStream.Copy( inputPdfStream); 
		inputPdfStream.Position = 0;
		using (var reader = new iText.Kernel.pdf.PdfReader (inputPdfStream) )
		using (var writer = new iText.Kernel.Pdf.PdfWriter (outputPdfStream)) 
		using (var pdfDoc = new iText.Kernel.Pdf.PdfDocument (reader, writer))
		{
			//всего листов (для цикла)
			var numberOfPages = pdfDoc.GetNumberOfPages();
			//Шрифт
			string fontPath = Path.Combine( Environment.GetFolderPath( Environment.Special Folder.Fonts ), "arial.ttf" );
			var font = iText.Kernel.Font.Pdf FontFactory.CreateFont (fontPath, iText.10.Font.PdfEncodings.IDENTITY_H, true); // Высота шрифта
			var fontSize = 14f;
			//Отступы для надписи var marginx = 20;
			var marginŸ = 20;
			//Надпись
			string text = "Учтенная копия";
			// Высота области в которой будет надпись
			var textWidth = font.GetWidth (text, fontSize);
			for (var i = 1; i<=numberOfPages; i++)
			{
				//лист
				var page = pdfDoc.GetPage(i);
				var canvas = new iText.Kernel.Pdf.Canvas.PdfCanvas (page.NewContentStreamAfter(), page.GetResources(), pdfDoc);
				var y = page.GetPageSizeWithRotation().GetHeight() - marginy - fontSize;
				canvas.SaveState();
				canvas
					.SetFontAndSize (font, fontSize)
					.BeginText()
						.MoveText(0, 0)
						.ShowText (text)
					.EndText();
				canvas.RestoreState();

			}
		}
	}
}


на трех файлах pdf разный результат: в первом текст написан как положен слева внизу в углу, во втором - слева вверху и как будто там (0, 0) причем ось Х направлена вниз, а ось Y в право. в третьем тоже наверху только теперь текст еще и отражен зеркально.
672a8f0570df3673204962.png
Пробовал анализировать команды pdf "cm" чтобы понять в каком положении сейчас матрица, но понял что это без толку. Может кто сталкивался или знает в чем причина таких разных результатов.
  • Вопрос задан
  • 119 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Octabun
Вам надо в стандарт pdf. Это не Ваш текст вертит, это исходный текст в разных ориентациях и его вертит перед показом, а Ваш - нет. И тут два решения - либо смотреть как ориентирован текст в документе, либо тупо добавлять вашу накладку в конец документа со своим xref (открываете pdf текстовым редактором и в конце видите startxref - это оно).

Преимущество второго способа - нужно учить малую часть стандарта и все изменения легко отменить просто отбросив конец файла, что автоматически что ручками. Недостаток - линеаризованный pdf лучше превратить в не линеаризованный.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы