Troubleshooting
Эта страница собирает исправления самых распространённых проблем, встречающихся в Aspose.PDF FOSS для подписей, аннотаций, редактирования, рисования, конвертации и текстовых API TypeScript.
Асинхронные методы (Sign, Certify, VerifySignatures) выглядят так, будто ничего не делают
Document.Sign(), Document.Certify() и Document.VerifySignatures() все возвращают Promise. Вызов одного без await позволяет продолжить выполнение сразу — последующий doc.WriteTo() или doc.Save() могут выполниться до того, как подпись действительно будет записана, а последующий console.log() по результату проверки записывает неразрешённый Promise вместо массива SignatureReport[]:
// Wrong — WriteTo can race ahead of Sign:
approving.Sign(identity, opts);
approving.WriteTo('signed.pdf');
// Correct:
await approving.Sign(identity, opts);
approving.WriteTo('signed.pdf');Смотрите Security руководство по полному процессу certify-then-sign.
SearchAnnotationText() и SearchAnnotations() возвращают разные результаты для одного и того же текста
Эти два метода поиска не пересекаются в обоих направлениях на одной странице. SearchAnnotationText() соответствует буквальным метаданным аннотации (/Contents, /T, /Subj); SearchAnnotations() соответствует rendered текст, отрисованный собственным видом разметочной аннотации (например a FreeText теле). Значение, сохранённое только в /Contents находится одним методом и пропускается другим:
const metadataHits = page.SearchAnnotationText('confidential'); // matches /Contents, /T, /Subj
const renderedHits = page.SearchAnnotations('confidential'); // matches rendered markup text
Ни один из методов не ищет обычный текст страницы — используйте Page.GetText() or Page.Search() для этого. Смотрите Аннотации руководство по полной аннотации API.
Маркер редактирования сам по себе не удаляет содержимое
Page.AddRedact() только рисует RedactAnnotation над областью — содержимое под ней остаётся нетронутым и всё ещё можно копировать до тех пор, пока Page.ApplyRedactions() запускается и деструктивно переписывает поток содержимого. Добавленные метки after ApplyRedactions() уже запущен и остаётся не применённым бесконечно:
page.AddRedact({ rect: [216, 548, 460, 566], fill: [0, 0, 0], overlayText: '[REDACTED]' });
page.ApplyRedactions(); // only now is the content actually destroyed
Смотрите Redaction руководство по деталям mark-vs-apply и редактированию текстового поиска.
Вызовы рисования PageGraphics никогда не появляются на странице
Page.Graphics() возвращает PageGraphics, который буферизует каждый вызов moveTo()/rect()/circle()/stroke()/fill() до тех пор, пока apply() не зафиксирует их на странице. Последовательность, в которой отсутствует вызов apply(), ничего не рисует:
const g = page.Graphics();
g.setStrokeColor([0.2, 0.2, 0.2]).setLineWidth(1).rect(80, 300, 200, 100).stroke();
g.apply(); // required — nothing above is visible without this call
Смотрите Images руководство по полному чертежу и слою optional-content-layer API.
Document.ToHtml() и Hand-Tagging обе зависят от дерева структуры
Семантический режим Document.ToHtml() переупаковывает контент, проходя по дереву структуры; в нетегированном документе он тихо переходит к эвристическому телу, и экспорт теряет структуру заголовков. То же самое дерево используется для ручной разметки (StructTreeRoot.Append() / StructElement.MarkContent()) и того, что возвращает Document.GetStructTree() — вызовите Document.CreateStructTree() или Document.AutoTag() до любого из них:
const root = doc.GetStructTree();
if (!root) throw new Error('document is not tagged yet');Смотрите Conversion and Structure руководства по API экспорта и тегирования соответственно.
AddTextBlock() бесшумно обрезает текст по его ограничивающему прямоугольнику
Page.AddTextBlock(text, rect, options) оборачивает текст внутри rect и возвращает всё, что не помещается (или null, если всё поместилось) — он не увеличивает прямоугольник и не бросает исключение при переполнении содержимого. Возвращаемое значение, которое игнорируется, означает, что переполненный текст просто не отрисовывается:
const rest = page.AddTextBlock(longText, [72, 600, 200, 150], { fontSize: 11 });
if (rest) page.AddTextBlock(rest, [300, 600, 200, 150]); // route the overflow somewhere
Смотрите Text руководство по полному размещению текста и извлечению API.