Crystal Report extra characters when exporting to PDF

Crystal Report Extra Characters

 

Crystal Report extra characters: This is a problem I have had a number of times. It happens on multiple workstations, and it has a habit of returning. After some investigation, it would appear that it returns after a Crystal upgrade.

The symptom:

Exporting a Crystal Report that uses the Calibri font to a Portable Document Format file (PDF) will add an extra ‘ti’ after any letter ‘t’. Oddly, if you copy & paste the word into notepad or other text editor, it is correct.

The cause:

In my previous experience the problem has been caused by a missing USP10.dll file  (Uniscribe Unicode Script Processor) in the following path:

C:\Program Files (x86)\Business Objects\BusinessObjects Enterprise 12.0\win32_x86

Either that, or it’s a different version. On my machine, the USP10.DLL file can be found in the following places, and I’ve included the MD5 of each for later reference:

d529d8f23f9c686a293203eb837b61ec

“C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win32_x86\usp10.dll”

9255da3e4662edf10170e30e8b97c194

“C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win64_x64\usp10.dll”

85cea5cd92c4766ac54823011f6de43b

“C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\USP10.DLL”

1602a45f76281381dcfc88e25d889027

“C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\vwd\usp10.dll”

9870191d0f26bdaaf6d4550eee3a96ec

“C:\Program Files (x86)\Business Objects\BusinessObjects Enterprise 12.0\win32_x86\usp10.dll”

I had to use Process Explorer (a fantastic tool) to find out exactly which one was in use – in this instance it was at the following path:

C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win32_x86\usp10.dll

It is version 1.626.7601.23259, which can be found in the details screen of the file:

Crystal Report Extra Characters : USP10.DLL d529d8f23f9c686a293203eb837b61ec

USP10.DLL d529d8f23f9c686a293203eb837b61ec

 

So I copied over the USP10.DLL from “C:\Program Files (x86)\Business Objects\BusinessObjects Enterprise 12.0\win32_x86\usp10.dll” to “C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win32_x86\usp10.dll”, and the problem was resolved. For reference, the MD5 of the one that works is 9870191d0f26bdaaf6d4550eee3a96ec, and the details are as follows (file version 1.422.3790.1830):

Crystal Report Extra Characters : USP10.DLL 9870191d0f26bdaaf6d4550eee3a96ec

UPS10.DLL: 9870191d0f26bdaaf6d4550eee3a96ec

I found the following page helpful during my investigations of this issue:

https://archive.sap.com/discussions/thread/1272660

Check out my other Crystal Report annoyances here:

https://roguelj.co.uk/tag/crystal-reports/

Processing

Processing – Preliminary Experiments

Processing

I’ve recently been playing with Processing. Here are the results. I did experiment with triggering some MIDI notes at the center threshold but it didn’t sound as good as I wanted. I’ll expand on that once I get a bit more time.

The Output

The Source

import themidibus.*; //Import the library
MidiBus myBus; // The MidiBus
float b = 20;
float d = 0;

void setup () {
  size(1280, 720);
  frameRate(30);
  MidiBus.list(); 
  myBus = new MidiBus(this, "Bus 1", "Bus 1");
}
  
void draw() {

  int icCount = 20;
  double number = Math.PI * 2 / icCount;
  background(0);
    
  for (int n=1; n<= icCount; n++) { double x = 300 + ((Math.sin(number * (17-(n/ Math.PI)) * b)) * 120); double y = (n * 60) + 20; double s = 50 * (Math.sin(b*n) +1); //if(n % 4 ==0) { double check = Math.sin(number * (17-(n/ Math.PI)) * b); if (check >=0.1 && check <=0.2) {
        //myBus.sendNoteOn(1, n + 60, 12); 
        fill(#0000ff);
      } else {
        //myBus.sendNoteOff(1, n + 60, 12); 
        fill(#ffffff);
      }
    //}
    
    ellipse((float)y,(float)x,(float)s,(float)s);
  }

  b += 0.02;
  d += 0.04;
  
}

Check out the software here: https://processing.org/
Check out other sine programming examples here (JavaScript): https://roguelj.co.uk/toybox/ 

HTML Canvas: Javascript Code for Toybox A1

HTML Canvas

Here is the JavaScript for the first of my experiments with the HTML Canvas tag.

 

	var example;
	var context;
	var b =0;
 
	function init() {
 
		example = document.getElementById('canvas1');
		context = example.getContext('2d');
		b=0;
		draw();
 
	}
 
	function draw() {
 
		context.fillStyle = "rgb(255,255,255)";
		context.fillRect(0, 0, 400, 800);
 
		var icCount = 12;
		var number = Math.PI * 2 / icCount;
 
			for (n=1; n&lt;= icCount; n++) {
 
				x = 200 + ((Math.sin(number * n * b)) * 150);
				y = 150 + ((Math.tan(number * n * b)) * 100);
 
				context.fillStyle = 'rgb(0,0,0)';
 
				context.beginPath();
				context.arc(x, y, 25, 0, Math.PI*2, true); 
				context.closePath();
				context.fill();
 
			}
 
		b += 0.02;
 
		setTimeout("draw()",33);
 
	}

Link to page:
https://roguelj.co.uk/sineart/a1.php

HTML Canvas Tag: ToyBox SineArt A1

ToyBox SineArt A1

 

Link to other pages in this series:
https://roguelj.co.uk/toybox/

Link to the W3C School page about the HTML Canvas
https://www.w3schools.com/html/html5_canvas.asp

1 2 3 9