Troubleshooting
Esta página recopila correcciones para los problemas más comunes encontrados en Aspose.PDF FOSS para las APIs de firma, anotación, censura, dibujo, conversión y texto de TypeScript.
Los métodos asíncronos (Sign, Certify, VerifySignatures) parecen no hacer nada
Document.Sign(), Document.Certify() y Document.VerifySignatures() devuelven todos un Promise. Llamar a uno sin await permite que la ejecución continúe inmediatamente — un doc.WriteTo() o doc.Save() posterior puede ejecutarse antes de que la firma se haya escrito realmente, y un console.log() posterior sobre el resultado de la verificación registra un Promise no resuelto en lugar del array 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');Ver el Security guía para el flujo completo de certify-then-sign.
SearchAnnotationText() y SearchAnnotations() devuelven resultados diferentes para el mismo texto
Estos dos métodos de búsqueda son disjuntos en ambas direcciones en la misma página. SearchAnnotationText() coincide con metadatos de anotación literales (/Contents, /T, /Subj); SearchAnnotations() coincide con el rendered texto dibujado por la propia apariencia de una anotación de marcado (por ejemplo un FreeText cuerpo). Un valor almacenado solo en /Contents se encuentra en uno y se pierde en el otro:
const metadataHits = page.SearchAnnotationText('confidential'); // matches /Contents, /T, /Subj
const renderedHits = page.SearchAnnotations('confidential'); // matches rendered markup text
Ninguno de los métodos busca texto de página ordinario — utilice Page.GetText() or Page.Search() para eso. Vea la Anotaciones guía para la anotación completa API.
Una marca de redacción por sí sola no elimina el contenido
Page.AddRedact() solo dibuja una RedactAnnotation sobre una región — el contenido subyacente permanece intacto y sigue siendo seleccionable para copiar hasta Page.ApplyRedactions() se ejecuta y reescribe destructivamente el flujo de contenido. Marcas añadidas after ApplyRedactions() ya se ha ejecutado, permanece sin aplicar indefinidamente:
page.AddRedact({ rect: [216, 548, 460, 566], fill: [0, 0, 0], overlayText: '[REDACTED]' });
page.ApplyRedactions(); // only now is the content actually destroyed
Consulte el Redaction guía para los detalles de mark-vs-apply y la redacción de búsqueda de texto.
Las llamadas de dibujo de PageGraphics nunca aparecen en la página
Page.Graphics() devuelve un PageGraphics que almacena en búfer cada llamada moveTo()/rect()/circle()/stroke()/fill() hasta que apply() las confirma en la página. Una secuencia que le falta su llamada apply() no dibuja nada:
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
Consulte el Images guía para el dibujo completo y la capa de contenido opcional API.
Document.ToHtml() y el etiquetado manual dependen ambos de un árbol de estructura
El modo semántico Document.ToHtml() reorganiza el contenido recorriendo el árbol de estructura; en un documento sin etiquetar retrocede silenciosamente a un cuerpo heurístico y la exportación pierde su estructura de encabezados. El mismo árbol es en el que el etiquetado manual (StructTreeRoot.Append() / StructElement.MarkContent()) escribe y lo que Document.GetStructTree() devuelve — llame a Document.CreateStructTree() o Document.AutoTag() antes de cualquiera de los dos:
const root = doc.GetStructTree();
if (!root) throw new Error('document is not tagged yet');Consulte el Conversion and Structure guías para las APIs de exportación y etiquetado, respectivamente.
AddTextBlock() recorta silenciosamente el texto en su rectángulo delimitador.
Page.AddTextBlock(text, rect, options) envuelve el texto dentro de rect y devuelve lo que no quepa (o null si todo cabe) — no amplía el rectángulo ni lanza una excepción cuando el contenido se desborda. Un valor de retorno que se ignore significa que el texto excedente simplemente nunca se dibuja:
const rest = page.AddTextBlock(longText, [72, 600, 200, 150], { fontSize: 11 });
if (rest) page.AddTextBlock(rest, [300, 600, 200, 150]); // route the overflow somewhere
Consulte el Text guía para la colocación completa de texto y la extracción API.