Это связано с предыдущим вопросом, который я задал о reading an annotation's appearance stream and writing its text to the Contents. Я хотел бы сделать аналогичное действие с аннотацией Line, прочитав его ширину внешнего вида и установив фактическую ширину в соответствии с внешним видом.Как читать ширину внешнего вида строки, используя iTextSharp?
У меня возникли проблемы с тем, как настроить функцию «set text contents using appearance» для установки ширины линии. Это код, который я сейчас использую для получения текста:
//main function for setting inner content to appearance value
public void changeAnnotationContentToAppearance(PdfDictionary dict)
{
string surface = pdfTextParser.retrieveText(dict);
if (surface != null)
{
//update CONTENTS with appearance
//for changing line width, I would instead modify the /BS dictionary's /W key value, i think
dict.Put(PdfName.CONTENTS, new PdfString(surface));
}
}
//get text from /AP dictionary
public string retrieveText(PdfDictionary annotDictionary)
{
PdfDictionary appearancesDictionary = annotDictionary.GetAsDict(PdfName.AP);
foreach (PdfName key in appearancesDictionary.Keys)
{
PdfStream value = appearancesDictionary.GetAsStream(key);
if (value != null)
{
String text = ExtractAnnotationText(value);
return text;
}
}
return null;
}
//read the appearance stream and extract text contents
public String ExtractAnnotationText(PdfStream xObject)
{
PdfDictionary resources = xObject.GetAsDict(PdfName.RESOURCES);
ITextExtractionStrategy strategy = new LocationTextExtractionStrategy();
PdfContentStreamProcessor processor = new PdfContentStreamProcessor(strategy);
processor.ProcessContent(ContentByteUtils.GetContentBytesFromContentObject(xObject), resources);
return strategy.GetResultantText();
}
ExtractAnnotationText()
только кажется способным читать текст, а не ширина линии, потому что ITextExtractionStrategy()
не имеет методы для возврата свойств линии. Предлагает ли iTextSharp другую стратегию добычи для использования при работе с линиями?
Если я читаю право, this question, this one и this one предположить, что я должен был бы реализовать класс, но я не уверен, какой из них я должен подклассы для получения данных строки, или как именно я бы идти о делая это.
EDIT: Я также хотел бы получить данные о внешнем виде для точек, определяющих прямоугольник в текстовом поле. Хотя это может быть другой вопрос, похоже, это связано с этой проблемой: получение нетекстовых графических данных, определяющих поток внешнего вида аннотации.
Доступен ли 'PathRenderInfo' под другим именем в iTextSharp (мой проект находится на C#)? Кроме того, знаете ли вы, работает ли этот подход для аннотаций строк и аннотаций? Или просто фигуры? – sigil
iText 7 для C# выйдет в июне. Функциональность работает для потоков контента (например, поток содержимого страницы, поток внешнего вида аннотации, ...). Обратите внимание, что аннотации не требуют потока появления. Если вы посмотрите на словарь аннотаций, вы найдете пограничные словари, координаты аннотаций строк и т. Д. Однако в вашем вопросе вы явно попросили способ разобрать поток внешнего вида. –
Я обновил свой ответ, если ваш вопрос был неправильным. –