Como trabalhar com campos de transição no .NET
Como trabalhar com campos de transição em .NET
Aspose.Words FOSS para .NET representa um grupo de tipos de campos Word mais antigos — campos de código de barras e um conjunto de campos de compatibilidade pré-Open-XML — por meio de classes dedicadas no Aspose.Words.Fields namespace, informalmente chamado transitional campos aqui. Este guia mostra como encontrar, ler e configurá-los. Cada classe de campo de transição deriva do tipo base Field tipo, ao lado do genérico Field objeto exposto por Document.Range.Fields.
Guia passo a passo
Etapa 1: Encontrar campos de transição em um documento
Enumere Document.Range.Fields e compare o Type de cada campo (um valor FieldType) com as constantes relevantes — FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef ou FieldInfo — depois faça o cast do Field genérico para a classe correspondente para acessar suas propriedades específicas. Sempre verifique Type antes de fazer o cast: fazer cast para a classe de campo errada gera um InvalidCastException.
Etapa 2: Configurar um campo DISPLAYBARCODE ou MERGEBARCODE
FieldDisplayBarcode (o campo DISPLAYBARCODE) e FieldMergeBarcode (o campo MERGEBARCODE, que também implementa IMergeFieldSurrogate para mesclagem de correspondência) compartilham o mesmo conjunto de propriedades de configuração de código de barras: BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar e FixCheckDigit. Defina esses na instância do campo, então chame Update() para que Result reflita a nova configuração antes de salvar o documento.
Etapa 3: Ler Dados do Campo BARCODE (Postal) Legado
FieldBarcode implementa o campo BARCODE mais antigo, que é especificamente um campo de código de barras postal dos EUA (POSTNET) ao invés de um código de barras de uso geral — ele não compartilha as propriedades BarcodeType/BarcodeValue da Etapa 2. Em vez disso, ele expõe PostalAddress (o endereço que o código de barras codifica), FacingIdentificationMark, IsUSPostalAddress e IsBookmark. Verifique Field.Type contra FieldType.FieldBarcode especificamente antes de ler essas propriedades, pois converter um campo DISPLAYBARCODE ou MERGEBARCODE para FieldBarcode não exporia as propriedades que você espera.
Etapa 4: Renderizar Imagens de Código de Barras com um Gerador Personalizado
Esta edição FOSS contém dados de campo de código de barras, mas não inclui um motor de renderização de código de barras. BarcodeParameters é o contêiner de passagem que consolida as configurações de ambas as famílias de campos de código de barras — as propriedades DISPLAYBARCODE/MERGEBARCODE da Etapa 2 e as propriedades postais da Etapa 3 — em um único objeto entregue a um renderizador. Implemente IBarcodeGenerator, expondo GetBarcodeImage(parameters) e o legado GetOldBarcodeImage(parameters), para fornecer a renderização real da imagem; sem uma implementação fornecida, os campos de código de barras carregam apenas dados de configuração.
Etapa 5: Trabalhar com Campos de Compatibilidade Legada
Outras quatro classes cobrem códigos de campo mais antigos ainda encontrados em arquivos .docx legados. FieldBidiOutline implementa o campo BIDIOUTLINE para numeração de contorno da direita para a esquerda e não expõe propriedades além da superfície comum Field. FieldEQ implementa o campo de equação EQ e ainda expõe AsOfficeMath() para converter seu conteúdo em um objeto OfficeMath — isso só tem sucesso quando o campo realmente codifica uma equação. FieldFootnoteRef implementa o campo FOOTNOTEREF, que faz referência cruzada a uma marca de nota de rodapé ou nota final, e também não expõe propriedades além da superfície comum Field. FieldInfo implementa o campo INFO, lendo ou escrevendo uma propriedade de resumo de informação do documento através de suas propriedades InfoType e NewValue.
Etapa 6: Atualizar ou Congelar o Valor de um Campo Transicional
Cada classe de campo transicional herda GetFieldCode() (o texto de código subjacente do campo), Update() (reavalia o resultado), Unlink() (substitui o campo pelo seu último resultado calculado como texto estático) e Remove() (exclui o campo). Chame Update() após alterar a configuração de qualquer campo para que Result reflita a mudança, e use Unlink() quando o valor atual de um campo deve ser congelado em vez de permanecer recalculável.
Problemas Comuns e Soluções
InvalidCastException ao converter um Field para uma classe de campo de transição. O errado FieldType foi assumido. Verifique Field.Type contra o correspondente FieldType constante antes da conversão.
A DISPLAYBARCODE/MERGEBARCODE as propriedades do campo estão ausentes após a conversão. O campo foi convertido para FieldBarcode em vez de FieldDisplayBarcode/FieldMergeBarcode (ou vice-versa) — essas classes expõem diferentes conjuntos de propriedades, embora as três representem dados de código de barras. Confirme Field.Type antes da conversão.
Os campos de código de barras carregam dados, mas nenhuma imagem é renderizada. Não IBarcodeGenerator nenhuma implementação foi fornecida. Forneça um gerador personalizado implementando GetBarcodeImage(parameters) — esta edição não inclui um mecanismo de renderização de código de barras embutido.
FieldEQ.AsOfficeMath() retorna resultados inesperados. O campo não contém uma instrução de equação válida. Inspecione o campo GetFieldCode() saída antes de tentar a conversão.
FieldInfoO valor não é atualizado após a definição NewValue. O campo não foi atualizado após a alteração. Chame Update() no campo após modificar NewValue.
Perguntas Frequentes
O que significa “transitional” para esses tipos de campo?
Não é terminologia oficial do Word — agrupa classes de campo no namespace Aspose.Words.Fields desta edição que implementam códigos de campo mais antigos (campos de código de barras e campos de compatibilidade pré-Open-XML) por meio de suas próprias classes fortemente tipadas, em vez de serem tratados apenas pelo objeto genérico Field.
O FieldBarcode usa as mesmas propriedades que FieldDisplayBarcode?
Não. FieldBarcode implementa o campo legado BARCODE (postal/POSTNET) e expõe PostalAddress, FacingIdentificationMark, IsUSPostalAddress e IsBookmark. FieldDisplayBarcode e FieldMergeBarcode compartilham um conjunto de propriedades diferente — BarcodeType, BarcodeValue, SymbolHeight e configurações de renderização relacionadas.
Esta edição renderiza imagens de código de barras?
Não. FieldBarcode, FieldDisplayBarcode e FieldMergeBarcode armazenam dados de configuração de código de barras e expõem a interface IBarcodeGenerator, mas nenhum motor de renderização de código de barras é incluído nesta edição — é necessária uma implementação personalizada de IBarcodeGenerator para gerar uma imagem.
Posso converter um campo EQ para uma equação OfficeMath?
Sim, via FieldEQ.AsOfficeMath(), desde que o código do campo realmente codifique uma equação.
Como encontro todos os campos de transição em um documento?
Enumere Document.Range.Fields e compare cada Field.Type com as constantes FieldType relevantes (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).