0

У меня странная проблема на одном из производственных серверов. У нас есть архитектура, в которой мы интегрировали AX, используя веб-службы с .NET-приложением. Мы используем объекты System.IO для преобразования PDF-отчета в байты и отправки этой информации через веб-службы в приложение. Метод, который мы используем, работал до недавнего времени, когда мы начали видеть странные результаты. Байт-массив, возвращенный в производственной среде, отличался от остальной среды. Очевидно, что база кодов одинакова во всех средах. Байт-массив имел большое количество, примерно 47000, а остальные среды - около 3000. Это вызывает проблемы с созданием отчета в приложении.System.Byte [] дает неожиданное значение

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

static System.Byte[] test() 
{ 
    str _filePath = "C:\\Users\\Harry\\Desktop\\ABC.PDF"; 

    System.Byte[]   pdfBuffer; 
    System.IO.FileInfo  fileInfo; 
    System.IO.FileStream fs; 
    int      size; 
    Set      permissionSet = new Set(Types::Class); 

    permissionSet.add(new FileIOPermission(_filePath,'r')); 
    permissionSet.add(new InteropPermission(InteropKind::ClrInterop)); 

    CodeAccessPermission::assertMultiple(permissionSet); 

    //Load the file 
    fileInfo = new System.IO.FileInfo(_filePath); 
    //Initiallize the byte array by setting the length of the file 
    size = int642int(fileInfo.get_Length()); 
    pdfBuffer = new System.Byte[size](); 
    // Stream the file 
    fs = new System.IO.FileStream(fileInfo.get_FullName(), System.IO.FileMode::Open, System.IO.FileAccess::Read); 
    fs.Read(pdfBuffer, 0, pdfBuffer.get_Length()); 
    fs.Close(); 
    fs.Dispose(); 

    //Revert the access 
    CodeAccessPermission::revertAssert(); 

    return pdfBuffer;  
} 
+1

1. Шрифт, который генерирует штрих-код, отсутствует в рабочей среде или что средство визуализации SSRS не может его увидеть ... Например, происходит ли рендеринг в PDF на клиентской машине? Это возможно, так как в вашем примере кода показан путь к файлу как «C: \\ Users \\ Harry \\ Desktop \\ ABC.PDF», а не общий диск. 2. Если вы недавно установили шрифт штрих-кода, вам нужно будет [перезагрузить компьютер] (http://axcalated.blogspot.com.es/2014/09/custom-barcode-and-micr-fonts-on-ssrs. HTML). 3. См. [Нижний комментарий] (http://stackoverflow.com/questions/16318891/displaying-barcode-in-ssrs-report) –

+1

4. Если рендеринг на сервере невозможен (1) попробуйте установить шрифт штрих-кода на ваш клиентский компьютер (и перезапустите!), а затем отрисуйте отчет как PDF еще раз. –

+0

Эй, Яньсосо. Мы установили шрифт на сервере SSRS очень рано, но DID NOT перезапустили сервер как его производственный сервер. Это то, что требовалось! Мы сделали это, и это сработало. Шрифт штрих-кода отсутствовал на сервере SSRS. Большое спасибо за ваш ответ. – Harry

ответ

1

Решение должно заключаться в том, чтобы установить шрифты штрих-кода на сервере отчетов и перезапустить сервер. Мы задерживали перезагрузку сервера. Чтобы найти шрифт, который вам нужен, сгенерируйте отчет ssrs в клиенте AX и экспортируйте его в pdf. С помощью Adobe Reader вы можете проверить свойства отчета и увидеть штрих-код, необходимый на вкладке шрифтов. Это ваш шрифт.

+0

Спасибо за подробный ответ, Гарри. –

Смежные вопросы